iptables ПЕРЕНАПРАВЛЯЕТ все соединения от клиента через шлюз на сервер

iptables ПЕРЕНАПРАВЛЯЕТ все соединения от клиента через шлюз на сервер

Я хотел бы перенаправить все порты с моего клиента (Windows) на сервер (Windows), который находится за шлюзом (Linux).

Топология моей сети выглядит следующим образом:

10.20.10.14 --> 10.20.10.4 --> 192.168.1.1 --> 192.168.1.4
   client          ppp0           eth0          server
                |--------- Gateway -------|

где устройство Gateway имеет два сетевых устройства: ppp0 и eth0.

Мне бы хотелось, чтобы в случае сетевого соединения клиента с ppp0 серверное устройство видело данные на том же порту, на котором они были отправлены с клиента.

Другими словами, сервер должен думать, что он напрямую общается с клиентом, и шлюзы в этом случае прозрачны.

Кроме того, я хотел бы знать, как удалить это правило.

Есть идеи?

Примечание: Я являюсь администратором на всех устройствах.

решение1

Переводя английские правила в правила iptables, понадобится только это правило:

iptables -t nat -A PREROUTING -s 10.20.10.14 -i ppp0 -j DNAT --to-destination 192.168.1.4

Порт назначения не изменяется (и порт источника не должен изменяться, за исключением редких случаев, когда клиент одновременно подключается напрямую к серверу).

Ничто не мешает клиенту вручную добавить маршрут к 192.168.1.4via 10.20.10.4и напрямую обращаться к серверу. Если вы этого не хотите, чтобы скрыть IP сервера, вы также можете добавить это правило:

iptables -I FORWARD -s 10.20.10.14 -i ppp0 -d 192.168.1.4 -m conntrack ! --ctstate DNAT -j DROP

Это приведет к потере прямого доступа к серверу, который не был подвергнут ДНК-тестированию.

Чтобы удалить эти правила, просто используйте -D:

iptables -D FORWARD -s 10.20.10.14 -i ppp0 -d 192.168.1.4 -m conntrack ! --ctstate DNAT -j DROP
iptables -t nat -D PREROUTING -s 10.20.10.14 -i ppp0 -j DNAT --to-destination 192.168.1.4

Случайные замечания:

  • Переадресация IP должна быть включена на шлюзе, поскольку DNATed-соединение переадресуется. Проще всего это сделать так echo 1 > /proc/sys/net/ipv4/ip_forward.
  • Конечно, серверу необходим маршрут к клиенту для приема его подключений, например, наличие Gateway ( 192.168.1.1) в качестве шлюза по умолчанию.
  • -i ppp0необязательно и может быть удалено (или заменено на -d 10.20.10.4в правиле PREROUTING, если это желательно). Это может вызвать проблемы, если не заменить на -i ppp+( +будучи подстановочным знаком): когда происходит быстрый сбой/переподключение соединения, новый интерфейс ppp может быть вызван, ppp1если ppp0он не был разорван ранее. Правила iptables больше не будут соответствовать.
  • При удалении правила DNAT уже установленные потоки не будут затронуты, новые потоки будут затронуты (т.е. не достигнут сервера).

Связанный контент