Новый NAT в iptables вызывает ошибку 400 Bad Request для других HTTP-запросов.

Вопрос или проблема

Недавно я добавил несколько новых правил iptables (см. код ниже), чтобы направлять трафик через мой VPN (0x1000/0x1000) для определенного назначения (172.67.168.48) на порт 443. Новые правила NAT работают через VPN, как мне и нужно, но они создали нежелательный эффект, вызывая ошибку 400 Bad Request на других HTTP-запросах, не связанных с указанным выше адресом.


# Создание правил RPDB
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993        # VPN 1 fwmark

iptables -t mangle -A PREROUTING -i br0 -p tcp -d 172.67.168.48 --dport 443 -j MARK --set-mark 0x1000/0x1000
iptables -t nat -A PREROUTING -i br0 -p tcp -m mark --mark 0x1000/0x1000 -j DNAT --to-destination 172.67.168.48:443

Есть идеи, почему другие HTTP-запросы могут быть затронуты (400 Bad Request) новыми правилами NAT, когда адрес и порт назначения явно указаны?

VPN Сервер: Предполагая, что eth0 (IP 1.2.3.4) является физическим интерфейсом, который либо напрямую подключен к целевому веб-серверу, либо имеет маршрут к его IP или сети, вы можете мониторить любой трафик, направленный на IP веб-сервера 172.67.168.48:443, чтобы его можно было принудительно направить через VPN-туннель и затем выполнить NAT на IP-адрес интерфейса eth0 (1.2.3.4 в этом примере). В этом случае интерфейс br0 (IP 10.10.10.1) является виртуальным интерфейсом, который VPN-сервер использует для туннелирования трафика. Пока VPN работает, он уже знает, как маршрутизировать пакеты до конечного IP 172.67.168.48

Если нет, то вам нужно добавить статический маршрут:

$ ip route show
172.67.168.48/32 via 10.10.10.1 dev br0 metric 101

Как только условие маршрутизации выполнено, вы можете заставить трафик, направленный на IP 172.67.168.48:443, быть маршрутизированным через туннель и выйти с другой стороны как 1.2.3.4 на пути к 172.67.168.48

$ sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp -m tcp -d 172.67.168.48 --dport 443 -j SNAT --to-source 1.2.3.4
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Если клиент отправляет пакет на 172.67.168.48:80, например, исходный IP не изменится, и пакет может быть отброшен, если это не разрешено последующими цепочками.

Все:

Выяснилось, что в моем первоначальном правиле iptables -t nat не было определения –dport 443, и именно поэтому оно взаимодействовало с другими HTTP-запросами.

# Создание правил RPDB
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993        # VPN 1 fwmark

iptables -t mangle -A PREROUTING -i br0 -p tcp --dport 443 -d 172.67.168.48 -j MARK --set-mark 0x2000/0x2000
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to-destination 172.67.168.48:443 -m mark --mark 0x2000/0x2000

Как только к правилу iptables -t nat было добавлено определение –dport 443, проблема была решена.

Надеюсь, это поможет кому-то в будущем.

С уважением,

Гэри

Ответ или решение

Новая конфигурация iptables NAT вызывает ошибку 400 Bad Request при отправке других HTTP-запросов

Недавно я добавил несколько новых правил iptables (см. код ниже), чтобы маршрутизировать трафик через мой VPN (0x1000/0x1000) для определенного назначения (172.67.168.48) по порту 443. Новые правила NAT функционируют по плану, но ненамеренно вызвали ошибку 400 Bad Request для других HTTP-запросов, не связанных с указанным назначением.

# Создание правил в RPDB
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993        # VPN 1 fwmark

iptables -t mangle -A PREROUTING -i br0 -p tcp -d 172.67.168.48 --dport 443 -j MARK --set-mark 0x1000/0x1000
iptables -t nat -A PREROUTING -i br0 -p tcp -m mark --mark 0x1000/0x1000 -j DNAT --to-destination 172.67.168.48:443

Проблема заключалась в неверной конфигурации правила NAT. В исходной конфигурации не было указано dport 443, что могло приводить к нежелательным вмешательствам в другие HTTP-запросы. Эти запросы могли перенаправляться через VPN из-за отсутствия четко определенного порта в правиле DNAT.

Для устранения этой проблемы необходимо было скорректировать правило NAT, добавив требуемый параметр –dport 443:

“`shell
iptables -t mangle -A PREROUTING -i br0 -p tcp –dport 443 -d 172.67.168.48 -j MARK –set-mark 0x2000/0x2000
iptables -t nat -A PREROUTING -i br0 -p tcp –dport 443 -j DNAT –to-destination 172.67.168.48:443 -m mark –mark 0x2000/0x2000
“`

После добавления параметра –dport 443 проблема была устранена. Это пример того, как важно правильно специфицировать условия в правилах NAT, чтобы избежать нежелательных последствий.

Это может быть полезно другим профессионалам, сталкивающимся с аналогичными задачами настройки VPN и NAT. Проблемы с сетью зачастую требуют детального внимания к правилам маршрутизации и преобразования трафика, и правильная настройка iptables играет ключевую роль в обеспечении стабильности и безопасности сетевых соединений.

С уважением,
Гэри

Оцените материал
Добавить комментарий

Капча загружается...