
Я хотел бы перенаправить все порты с моего клиента (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.4
via 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 уже установленные потоки не будут затронуты, новые потоки будут затронуты (т.е. не достигнут сервера).