Iptables NAT (PAT) от A до B до C и обратно
Я хочу получить доступ через SSH к серверу БД из внешней сети через шлюз linux (CentOS) с двумя интерфейсами в отдельных сетях, как показано ниже:
IP ПК администратора: 10.21.1.8
Linux GW IP eth1 Снаружи: 10.21.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
Нужна подсказка
2 ответа
В зависимости от ваших потребностей и конфигурации сети существуют различные решения.
Если ваш сервер БД 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
iptables -A FORWARD -d $dst_ip -i eth2 -p tcp -m tcp --dport 10022 -j ПРИНЯТЬ
iptables -t nat -A ПРЕДУПРЕЖДЕНИЕ -d $src_ip -p tcp -m tcp --dport 10022 -j DNAT - к месту назначения $ dst_ip
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
И.. решил THX.