Linux: Como portar o encaminhamento com iptables entre 2 hosts em redes diferentes?

3

Estou quase desesperado ... Eu tenho lido por cerca de 2 dias iptables encaminhando exemplos e não consigo fazer um encaminhamento de porta simples. Eu tenho 2 máquinas em redes diferentes. server1 (S1 com ip 195.21.2.41) está em minha casa e server2 (s2 com ip 10.234.141.126) está no Amazon EC2.

Eu preciso encaminhar todo o tráfego que vai de s2 para s1. Eu tentei isso:

liberando todas as regras, ativar o parâmetro do kernel para encaminhar, adicionar uma regra de pós-promoção e pré-formatação

iptables -F -t nat
iptables -F
echo 1 > /proc/sys/net/ipv4/ip_forward 
iptables -t nat -A POSTROUTING -d 195.21.2.41 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -d 10.234.141.126 -p tcp --dport 80 -j DNAT --to 195.21.2.41

opcionalmente eu também adicionei:

iptables -A FORWARD -p tcp -i eth0 -d 195.21.2.41 --dport 80 -j ACCEPT

Então eu tentei:

telnet 10.234.141.126 80

Mas não funcionou. Por que diabos isso não está funcionando?

UPDATE: veja alguns testes:

[root@ip-10-234-141-216 ~]# telnet 195.21.2.41 80
Trying 195.21.2.41...
Connected to 195.21.2.41.
Escape character is '^]'.
[root@ip-10-234-141-216 ~]# iptables -F -t nat
[root@ip-10-234-141-216 ~]# iptables -F
[root@ip-10-234-141-216 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 
[root@ip-10-234-141-216 ~]# /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.234.141.126 --dport 80 -j DNAT --to-destination 195.21.2.41
[root@ip-10-234-141-226 ~]# /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
[root@ip-10-234-141-216 ~]# /sbin/iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT
[root@ip-10-234-141-216 ~]# 
[root@ip-10-234-141-216 ~]# telnet 10.234.141.126 80
Trying 10.234.141.126...
telnet: connect to address 10.234.141.126: Connection refused

UPDATE 2 saída de rota:

[root@ip-10-234-141-216 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.234.141.0    0.0.0.0         255.255.254.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         10.234.141.1    0.0.0.0         UG    0      0        0 eth0
    
por Fakada 19.12.2011 / 16:21

5 respostas

3

Se você precisar redirecionar todo o tráfego de entrada para uma porta especificada encaminhada para sua outra máquina, tente rinetd em vez de iptables. É um servidor de redirecionamento de tráfego.

    
por 19.12.2011 / 22:17
1

Atualmente estou tendo o mesmo problema. Eu resolvi isso por

echo 1 >| /proc/sys/net/ipv4/ip_forward
iptables -t nat -A  PREROUTING -p tcp -d 47.168.137.12 --dport 8081 -j DNAT --to 47.168.137.11:8086
iptables -t nat  -A POSTROUTING -j MASQUERADE
    
por 26.09.2012 / 12:28
1

não funcionará porque você faz telnet da mesma máquina do roteador Deve funcionar corretamente de qualquer máquina que use essa máquina de rota como uma próxima esperança ou se você precisa apenas fazer esses trabalhos, você pode adicionar esta regra

/sbin/iptables -t nat -A OUTPUT -i eth0 -p tcp -d 10.234.141.126 --dport 80 -j DNAT --to-destination 195.21.2.41
    
por 21.02.2013 / 18:17
1

Por que não apenas usar o iptables?

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 3306 -j DNAT --to 192.168.7.101:3306

Um emprego:

iptables -t nat -A POSTROUTING -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.ip_forward=1
    
por 05.06.2014 / 12:49
0

Suas regras parecem boas para mim, exceto que você está usando --to em vez de --to-destination . Pode ser que você esteja usando uma versão diferente de iptables , mas de acordo com man 8 iptables (v.1.4.7):

   --to offset
          Set the offset from which it starts looking for any matching. If not passed, default is the packet size.

Em seguida, na seção DNAT:

   --to-destination [ipaddr][-ipaddr][:port[-port]]
          which can specify a single new destination IP address, an inclusive range of IP addresses, and optionally, a port range  (which  is  only
          valid  if the rule also specifies -p tcp or -p udp).  If no port range is specified, then the destination port will never be modified. If
          no IP address is specified then only the destination port will be modified.

          In Kernels up to 2.6.10 you can add several --to-destination options. For those  kernels,  if  you  specify  more  than  one  destination
          address, either via an address range or multiple --to-destination options, a simple round-robin (one after another in cycle) load balanc-
          ing takes place between these addresses.  Later Kernels (>= 2.6.11-rc1) don’t have the ability to NAT to multiple ranges anymore.

Isso é o que eu tentaria:

/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.234.141.126 --dport 80 -j DNAT --to-destination 195.21.2.41
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT

Eu também tentaria telnet para o seu destino de 10.234.141.126 apenas para ter certeza de que um firewall não está impedindo a conexão.

telnet 195.21.2.41 80
    
por 19.12.2011 / 17:35