2

Вот моя топология сети, 101.101.101.101 и 202.202.202.202 являются глобальными IP, в то время как 10.0.1.1 и 10.0.1.251 являются локальными IP. Хост B - мой компьютер.

Я могу SSH к маршрутизатору и затем SSH к хосту A на маршрутизаторе. Теперь я хочу подключить SSH к A напрямую, установив iptables на маршрутизаторе, например: пересылка всех пакетов с целевым хостом 101.101.101.101 и портом 25122 на 10.0.1.251:22.

Следующие три инструкции применяются:

iptables -t nat -A PREROUTING -d 101.101.101.101 -p tcp -m tcp --dport 25122 -j DNAT --to-destination 10.0.1.251:22
iptables -t nat -A POSTROUTING -o br-lan -j SNAT --to-source 10.0.1.1
iptables -t nat -A POSTROUTING -o eth0.2 -j SNAT --to-source 101.101.101.101

После выполнения они отображаются в списке iptables -t nat -v -n -L . Правила маршрутизации на маршрутизаторе таковы:

#route -n
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         101.101.101.254 0.0.0.0         UG    0      0        0 eth0.2
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 br-lan

Однако после того, как все это сделано, я все еще не могу подключиться по SSH к A с помощью «ssh 101.101.101.101 25122» на B. Он просто не работает с:

Could not connect to '101.101.101.101' (port 25122): Connection failed.
  1. Ситуация такова, что инструменты tcpdump не могут быть установлены на маршрутизаторе, чтобы увидеть состояние пакетов там. Но я могу запустить tcpdump на хосте A и подтвердить, что ни один пакет не пересылается с маршрутизатора.

  2. На роутере

    #cat /proc/sys/net/ipv4/ip_forward
    1
    

который показывает, что форвард включен.

  1. iptables -t nat -v -n -L каждый раз после того, как я сделал ssh на B, я могу видеть пакеты изменений PREROUTING маршрутизатора.

    Chain PREROUTING (policy ACCEPT 39526 packets, 3345K bytes)
    pkts bytes target     prot opt in     out     source               destination
    14   712 DNAT       tcp  --  *      *       0.0.0.0/0            115.156.132.118     tcp dpt:25122 to:10.0.1.251:22
    

Первое число (14) увеличивается каждый раз, когда я запускаю ssh на порт 25122 на хосте B. Это указывает на то, что пакеты поступили на маршрутизатор, но не были переадресованы?

  1. Я запускаю iptables -v -n -L и нахожу, что политика по умолчанию для цепочки FORWARD - DROP, а цепочки INPUT и OUTPUT - ACCEPT. Затем я устанавливаю цепочку FORWARD для принятия с помощью iptables --policy FORWARD ACCEPT . Тем не менее, SSH по-прежнему не работает, как указано выше.

И вот я здесь. Может ли это быть проблемой жесткого ограничения маршрутизатора или неправильными настройками iptables. Если это последнее, как я должен установить его для достижения моей цели?

Большое спасибо за любые подсказки.

1 ответ1

0

По сути, вам нужно сначала упростить ситуацию и попробовать руководство, в котором вы совершенно уверены. И здравый смысл. Я могу сочувствовать вопросам iptables как однажды я потратил 3 дня, работая над этим, и концепции быстро становятся нечеткими, если только вы не получите настройку, которая работает правильно.

Чтобы ssh работал, вам нужно только это, если политика по умолчанию ACCEPT:

iptables -t nat -A PREROUTING -d 101.101.101.101 -p tcp --dport 25122 -j DNAT --to-destination 10.0.1.251:22

Однако по правилам сервера я бы предпочел различать объекты не по IP-адресу, а по имени интерфейса. Скажем, внешний интерфейс - это eth4 а интерфейс, который связан с вашей сетью - это eth1 тогда это должно работать и быть достаточным:

iptables -t nat -I PREROUTING -p tcp -i eth4 --dport 25122 -j DNAT --to-destination 10.0.1.251:22
iptables -A FORWARD -i eth4 -o eth1 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth4 -p tcp -j ACCEPT

Последние 2 правила необходимы в случае, если политика цепочки FORWARD отличается от ACCEPT.

Вы можете перечислить интерфейсы следующим образом: ip addr list .

И прежде чем принять решение о том, что изменения не работают, не забудьте восстановить брандмауэр до состояния по умолчанию, в котором вы хотите его видеть, непосредственно перед применением критических изменений. Например, очистить цепочки и перезапустить службу iptable. И вы уже включили пересылку в ядре.

Удачи!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .