Я хочу получить доступ через SSH к серверу БД из внешней сети через шлюз Linux (CentOS) с двумя интерфейсами в разных сетях, как показано ниже:
IP-адрес ПК администратора: 10.21.1.8
Linux GW IP eth1 Снаружи: 21.10.1.199 - Порт SSH 10051
Linux GW IP eth2 Внутри: 10.10.4.151
IP-адрес сервера БД: 10.10.4.51 - Порт SSH 22
ТЕЧЬ: 10.21.1.8 -> eth1: 10.21.1.199: 10051 -> eth2: 10.10.4.151 -> 10.10.4.51:22
и обратный путь
10.10.4.51 -> eth2: 10.10.4.151 -> 10.21.1.199 -> 10.21.1.8
Правила iptables, которые я пробовал, кажутся неправильными ... Что-то похожее с:
iptables -t mangle -A PREROUTING -d <Server1_eth0> -p tcp --dport 2223 -j MARK --set-mark 1 -i eth0
iptables -t nat -A PREROUTING -p tcp -m mark --mark 1 -j DNAT --to-destination <Server2>:2222 -i eth0
iptables -t nat -A POSTROUTING -m mark --mark 1 -j SNAT --to-source <Server1_eth1> -o eth1
iptables -A FORWARD -m mark --mark 1 -j ACCEPT -o eth1
Нужна подсказка .. спасибо ..
iptables -A ВПЕРЕД -d $ dst_ip -i eth2 -p tcp -m tcp --dport 10022 -j ПРИНЯТЬ
iptables -t nat -A PREROUTING -d $ src_ip -p tcp -m tcp --dport 10022 -j DNAT --to-destination $ dst_ip
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
И .. решено THX.
В зависимости от ваших потребностей и конфигурации сети существуют разные решения.
Если ваш сервер БД 10.10.4.51 имеет путь маршрутизации к ПК администратора 10.21.1.8, вам просто нужно это правило NAT на вашем gw:
iptables -t nat -A PREROUTING -i eth1 -s 10.21.1.8 -p tcp --dport 2222 -j DNAT --to 10.10.4.51:22
а затем просто ssh в порт gw 10.21.1.199:2222.
Если ваш сервер БД не имеет шлюза в сеть 10.21, с помощью этого правила NAT вы можете «скрыть» адрес ПК администратора за IP-адресом gw:
iptables -t nat -A POSTROUTING -o eth2 -s 10.21.1.8 -p tcp -d 10.10.4.51 --dport 22 -j SNAT --to 10.10.4.151
Если у вас есть ssh-доступ к обоим серверам, и все, что вам нужно, это просто терминал, вы можете войти на сервер БД путем каскадирования ssh следующим образом:
ssh -t -l gwuser -p 10051 10.21.1.199 ssh -l dbuser -p 22 10.10.4.51