S SH tunnel <-> iptables Переадресация порта NAT - HOWTO? - PullRequest
0 голосов
/ 18 марта 2020

Мне нужно настроить доступ к серверам HTTP (S) на таких устройствах, как KVM и PDU в частной сети (192.168.0.0/24). Я должен пройти через изолированную сеть (10.0.0.0/8), ограниченную портами 22 и 443. У меня есть сервер с двойной NI C Linux внутри сети, который служит шлюзом для частной сети. См. Схему здесь: Схема сети

Мне нужно использовать прямой туннель S SH, чтобы добраться до шлюза Linux, затем использовать iptables NAT для маршрутизации трафика HTTP (s) c веб-интерфейсам на устройствах.

Я наблюдал, как с помощью tcpdump и iptables прослеживается, что входящий HTTP-запрос через туннель S SH отображается на интерфейсе lo, а не eth1 как можно ожидать.

Это заставило меня придумать следующие правила nat и filter:

*nat
-A PREROUTING -i lo -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.100:80
-A PREROUTING -i lo -p tcp -m tcp --dport 8081 -j DNAT --to-destination 192.168.0.101:443
-A POSTROUTING -d 10.0.0.0/8 -o lo -j SNAT --to-source <10.gateway_IP>
COMMIT
*filter
:INPUT ACCEPT [37234:5557621]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26648:27864039]
-A FORWARD -d 192.168.0.0/24  -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -d 192.168.0.0/24 -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT

Итак, когда я настроил туннель с:

ssh -L 8080:<gateway>:8080 <user>:@<gateway>

Затем убедитесь, что на шлюзе:

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

и затем выполните http://localhost:8080,

Пакеты отправляются из туннеля на шлюз, вне интерфейса lo, но iptables не передает его в пункт назначения в правиле PREROUTING. stderr из туннеля возвращает сообщение «Отказано в соединении».

Чего мне не хватает?

...