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.
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
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
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 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
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
Tags port-forwarding iptables linux