Перенаправление портов между государственным и частным интерфейсами

Этот вопрос задавали бесчисленные времена. Несколько недель назад мне удалось получить эту работу между этой почтой ServerFault и этой записью в блоге Digital Ocean. Я должен пропустить что-то простое.

Моя цель – просто пересылать пакеты между двумя интерфейсами, выполняющими NAT по пути. В частности, я хочу пересылать пакеты между открытым интерфейсом и внешним USB-сетевым адаптером.

Я убедился, что ядро ​​настроено на перенаправление портов:

$ sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1 

Как и специфические для интерфейса конфигурации пересылки:

 net.ipv4.conf.enp0s20u4u3.forwarding = 1 net.ipv4.conf.eno1.forwarding = 1 

Правила iptables я создал:

 iptables -t nat -A PREROUTING -i eno1 --protocol tcp --destination-port 10000 -j DNAT --to-destination 192.168.10.2:1234 iptables -A FORWARD -i eno1 -o enp0s20u4u3 --protocol tcp --destination-port 1234 -j ACCEPT iptables -t nat -A POSTROUTING -o enp0s20u4u3 --protocol tcp --source 192.168.10.2 --source-port 1234 -j SNAT --to-source 192.168.10.1 

Затем я попытался проверить эту конфигурацию, пытаясь установить TCP-соединение через порт 10000 (если мой внешний IP был 192.168.2.50).

 $ nc -v 192.168.2.50 10000 nc: connect to 192.168.2.50 port 10000 (tcp) failed: Connection refused 

Такое поведение имеет смысл, если мои записи правил неверны. Итак, я сбросил статистику правил

 $ iptables -t nat -L -v Chain PREROUTING (policy ACCEPT 15 packets, 2885 bytes) pkts bytes target prot opt in out source destination 0 0 DNAT tcp -- eno1 any anywhere anywhere tcp dpt:ndmp to:192.168.10.2:1234 Chain INPUT (policy ACCEPT 15 packets, 2885 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 SNAT tcp -- any enp0s20u4u3 192.168.10.2 anywhere tcp spt:search-agent to:192.168.10.1 

Таким образом, входящие пакеты TCP не соответствуют первому правилу цепи PREROUTING . Я не уверен, где ошибка; первое правило так просто. Идея такова:

Входящий трафик для 192.168.2.50:10000 получает NAT'd до 192.168.10.2:1234 в частном интерфейсе.

Linux и Unix - лучшая ОС в мире.