NAT com iptables para Xen DomU

2

Estou tentando encaminhar pacotes que chegam na máquina host a uma máquina virtual. O objetivo atual é encaminhar xxx.xxx.xxx.xxx:3022 para a vm 192.168.10.2:22 .

Eu tentei adicionar as seguintes regras por meio da linha de comando, mas sem sorte:

iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p tcp -i routed0 --dport 3022 -j DNAT --to 192.168.10.2:22 
iptables -A FORWARD -p tcp -i routed0 -d 192.168.10.2 --dport 3022 -j ACCEPT

Acho que isso pode ser devido a uma regra anterior. Aqui está a saída do iptables-save, incluindo todas as regras que o Xen gerou:

*nat
:PREROUTING ACCEPT [1299:340167]
:POSTROUTING ACCEPT [703:144619]
:OUTPUT ACCEPT [5:390]
-A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535 
-A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -p udp -j MASQUERADE --to-ports 1024-65535 
-A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE 
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535 
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535 
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE 
-A POSTROUTING -s 192.168.30.0/27 ! -d 192.168.30.0/27 -p tcp -j MASQUERADE --to-ports 1024-65535 
-A POSTROUTING -s 192.168.30.0/27 ! -d 192.168.30.0/27 -p udp -j MASQUERADE --to-ports 1024-65535 
-A POSTROUTING -s 192.168.30.0/27 ! -d 192.168.30.0/27 -j MASQUERADE 
COMMIT


*filter
:INPUT ACCEPT [2554:538140]
:FORWARD ACCEPT [105104:11434430]
:OUTPUT ACCEPT [900:115541]
-A INPUT -i nat-internal -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -i nat-internal -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -i nat-internal -p udp -m udp --dport 67 -j ACCEPT 
-A INPUT -i nat-internal -p tcp -m tcp --dport 67 -j ACCEPT 
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT 
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT 
-A INPUT -i nat-t1 -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -i nat-t1 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -i nat-t1 -p udp -m udp --dport 67 -j ACCEPT 
-A INPUT -i nat-t1 -p tcp -m tcp --dport 67 -j ACCEPT 
-A INPUT -i routed175 -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -i routed175 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -i routed175 -p udp -m udp --dport 67 -j ACCEPT 
-A INPUT -i routed175 -p tcp -m tcp --dport 67 -j ACCEPT 
-A FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out vif59.0 -j ACCEPT 
-A FORWARD -m physdev --physdev-in vif59.0 -j ACCEPT 
-A FORWARD -d 192.168.10.0/24 -o nat-internal -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -s 192.168.10.0/24 -i nat-internal -j ACCEPT 
-A FORWARD -i nat-internal -o nat-internal -j ACCEPT 
-A FORWARD -o nat-internal -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -i nat-internal -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out vif57.0 -j ACCEPT 
-A FORWARD -m physdev --physdev-in vif57.0 -j ACCEPT 
-A FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out vif37.0 -j ACCEPT 
-A FORWARD -m physdev --physdev-in vif37.0 -j ACCEPT 
-A FORWARD -s 10.10.0.0/24 -d 192.168.30.0/27 -i eth0 -m policy --dir in --pol ipsec --reqid 16385 --proto esp -j ACCEPT 
-A FORWARD -s 192.168.30.0/27 -d 10.10.0.0/24 -o eth0 -m policy --dir out --pol ipsec --reqid 16385 --proto esp -j ACCEPT 
-A FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out vif36.0 -j ACCEPT 
-A FORWARD -m physdev --physdev-in vif36.0 -j ACCEPT 
-A FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out vif31.0 -j ACCEPT 
-A FORWARD -m physdev --physdev-in vif31.0 -j ACCEPT 
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT 
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT 
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -d 192.168.30.0/27 -o nat-t1 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -s 192.168.30.0/27 -i nat-t1 -j ACCEPT 
-A FORWARD -i nat-t1 -o nat-t1 -j ACCEPT 
-A FORWARD -o nat-t1 -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -i nat-t1 -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out vif18.0 -j ACCEPT 
-A FORWARD -m physdev --physdev-in vif18.0 -j ACCEPT 
-A FORWARD -d xxx.xxx.xxx.xxx/32 -i eth0 -o routed175 -j ACCEPT 
-A FORWARD -s xxx.xxx.xxx.xxx/32 -i routed175 -o eth0 -j ACCEPT 
-A FORWARD -i routed175 -o routed175 -j ACCEPT 
-A FORWARD -o routed175 -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -i routed175 -j REJECT --reject-with icmp-port-unreachable 
COMMIT

Alguém pode me apontar na direção certa?

    
por pduersteler 19.03.2012 / 14:24

3 respostas

3

Sua regra FORWARD parece estranha. No momento em que seu pacote chega à tabela FORWARD, ele deve ter o destino 192.168.10.2:22, mas você está testando para 192.168.10.23022.

    
por 12.05.2012 / 11:03
1

Tente também anexar

iptables -t nat -A OUTPUT -d xxx.xxx.xxx.xxx -p tcp -i routed0 --dport 3022 -j DNAT --to 192.168.10.2:22  
    
por 19.03.2012 / 14:46
0

Acho que o problema pode estar relacionado à interface. Você deve mencionar a interface física, não a ponte. por exemplo, eu substituiria routed0 por eth0

Então eu estou um pouco desconfortável com -d xxx.xxx.xxx.xxx. Normalmente não precisamos mencionar o ip de destino, pois já sabemos que é o seu ip público. se você não colocar ip público, pode não funcionar. eu removeria isso.

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 3022 -j DNAT - para 192.168.10.2:22

    
por 01.07.2015 / 23:54