Я пытаюсь перенаправить трафик, входящий на определенный порт, на другой сервер, например: myserver.com:8081
-> externalserver.com:15081
.
Мой конкретный вариант использования - SSH, однако я настроил http://port81.helpfulseb.com:81
(без SSL) для тестирования с решением в этот вопрос. Но это не сработало.
Вот именно те команды, которые я выполнил:
iptables -t nat -A PREROUTING -p tcp --dport 81 -j DNAT --to-destination 158.69.48.226:81
iptables -t nat -A POSTROUTING -p tcp -d 158.69.48.226 --dport 81 -j SNAT --to-source <my external IP address, i.e. 51.68...>
158.69.48.226
это адрес port81.helpfulseb.com
Когда я пытаюсь подключиться к myserver.com:81
время запроса истекло. Выход iptables -t nat -v -L
показывает несколько входящих пакетов, но ничего исходящего. Я предполагаю, что это контрольные пакеты, которые получены, но по какой-то причине ответ не маршрутизируется должным образом.
$ iptables -t nat -v -L -n --line-number
Chain PREROUTING (policy ACCEPT 16632 packets, 665K bytes)
num pkts bytes target prot opt in out source destination
1 27 1276 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81 to:158.69.48.226:81
Chain INPUT (policy ACCEPT 16632 packets, 665K bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 492 packets, 33023 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 492 packets, 33023 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 SNAT tcp -- * * 0.0.0.0/0 158.69.48.226 tcp dpt:81 to:<my external IP>
Я использую Ubuntu 18.04 LTS, если это поможет.
Если вы не привязаны к iptables, есть решение socat:
root@myserver.com# /usr/bin/socat TCP-LISTEN:8081,fork,reuseaddr TCP:externalserver.com:15081