Мне нужно настроить доступ к серверам 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 из туннеля возвращает сообщение «Отказано в соединении».
Чего мне не хватает?