Я почти в отчаянии ... Я уже 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