Назад | Перейти на главную страницу

Linux: как выполнить переадресацию портов с помощью iptables между 2 хостами в разных сетях?

Я почти в отчаянии ... Я уже 2 дня читаю примеры переадресации iptables и не могу выполнить простую переадресацию портов. У меня 2 машины в разных сетях. server1 (S1 с ip 195.21.2.41) находится у меня дома, а server2 (s2 с ip 10.234.141.126) находится в Amazon EC2.

Мне нужно перенаправить весь трафик, который идет с s2 на s1. Я пробовал это:

очистка всех правил, активация параметра ядра для пересылки, добавление правил пост-маршрутизации и предварительной маршрутизации

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

при желании я также добавил:

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

Затем я попробовал:

telnet 10.234.141.126 80

Но не вышло. Какого черта это не работает?

ОБНОВЛЕНИЕ: взгляните на некоторые тесты:

[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 выход маршрута:

[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

Если вам просто нужно перенаправить весь входящий трафик на указанный порт, перенаправленный на другой компьютер, попробуйте Rinetd вместо iptables. Это сервер перенаправления трафика.

он не будет работать, потому что вы используете telnet с того же маршрутизатора.Он должен работать правильно с любого компьютера, который использует этот маршрутизатор в качестве следующей надежды, или, если вам нужно просто заставить их работать, вы можете добавить это правило

/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

У меня такая же проблема. Я решил это

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

Почему бы просто не использовать iptables?

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

Разовые работы:

iptables -t nat -A POSTROUTING -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.ip_forward=1

Мне нравятся ваши правила, за исключением того, что вы используете --to вместо того --to-destination. Возможно, вы используете другую версию iptables но согласно 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.

Затем в разделе 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.

Вот что я бы попробовал:

/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

Я бы также попытался подключиться к пункту назначения по telnet из 10.234.141.126 просто чтобы убедиться, что брандмауэр не препятствует соединению.

telnet 195.21.2.41 80