Добрый день. Я работаю над проектом с использованием сервера Ubuntu, и у меня настроено 3 виртуальных машины. Брандмауэр, маршрутизатор и клиент (1) на данный момент. В настоящее время я могу использовать putty для ssh-подключения к брандмауэру, затем я могу ssh-подключения к маршрутизатору и, наконец, я могу ssh-подключения к клиенту и писать код и компилировать.
Я хочу узнать, как можно напрямую подключиться к клиенту по SSH, без всего лишнего SSH-подключения?
Спасибо, kbot
EDIT: вывод sudo iptables -t nat -v -x -n -L
на брандмауэре:
Chain PREROUTING (policy ACCEPT 1217 packets, 108875 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 2 packets, 136 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 11 packets, 783 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 6 packets, 406 bytes)
pkts bytes target prot opt in out source destination
35 2218 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
решение1
Во-первых, я бы предложил вам объединить серверы брандмауэра и маршрутизатора в один сервер, поскольку брандмауэр уже реализует функциональность маршрутизатора.
Допустим, вы хотите сохранить возможность SSH к брандмауэру, но также добавить возможность SSH из внешнего мира напрямую к вашему клиенту. Вам нужно будет использовать другой порт для этой цели, так как это единственный способ для вашего набора правил iptables определить, что вам нужно. Я буду использовать порт 2222, но вы можете использовать любой свободный порт, который вам нужен.
Вам понадобится правило PREROUTING в таблице nat:
sudo iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 2222 -j DNAT --to $INTIP:22
Где: $EXTIF — имя вашего внешнего сетевого интерфейса. Я думаю, eth0. $INTIP — ваш внутренний IP-адрес.
Вам также необходимо разрешить трафику проходить через вашу цепочку FORWARD, поскольку ваша политика по умолчанию — DROP, как и должно быть:
sudo iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 2222 -d $INTIP -m state --state NEW -j LOG --log-prefix "PFNEW2222:" --log-level info
sudo iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 2222 -d $INTIP -m state --state NEW -j ACCEPT
Где: $INTIF — имя вашего внутреннего сетевого интерфейса. Я думаю, eth1.
Обратите внимание, что есть также правило ведения журнала. Просто предложение.
Ваш обратный путь должен быть в порядке.
Другие предложения:
Вам не нужно текущее правило цепочки OUTPUT, поскольку ваша политика по умолчанию — ACCEPT.
Если вы знаете свой внешний IP-адрес ($EXTIP ниже), используйте SNAT вместо MASQURADE:
sudo iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP
Если нет, то ладно.
Я предполагаю, что у вас уже включена переадресация:
$ cat /proc/sys/net/ipv4/ip_forward
1