Изменить IP-адрес источника входящего пакета

Изменить IP-адрес источника входящего пакета

Как изменить исходный IP-адрес входящего пакета до того, как он достигнет работающей службы?

У меня есть два устройства, Manager и Server, подключенные через VPN, и между ними установлен NAT.

IP-адрес интерфейса менеджера: A IP-адрес интерфейса сервера: B

Менеджер подключается к серверу с помощью NAT IP Y, а сервер видит IP X, когда менеджер подключается

Как настроить iptables на сервере таким образом, чтобы при поступлении пакета с исходным IP X, он изменялся на IP.

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

Пока что приведенные ниже правила iptables не помогают:

iptables -t nat -A POSTROUTING -s <X> -o eth0 -j SNAT --to <A>

Любая помощь приветствуется.

решение1

NAT зависит от услуг, «запрошенных»iptablesи предоставленоconntrackподсистема. SNAT недоступен до принятия решения о маршрутизации, но остается доступным после того, как пакет был выбран для маршрутизации на хост: в редко используемомнац/ВХОДцепь, как описано встраница руководства:

SNAT

Эта цель действительна только в таблице nat, в POSTROUTINGи INPUTцепочки и определяемые пользователем цепочки, которые вызываются только из этих цепочек. [...]

Итак, пока сервер получает трафик (не маршрутизирует его дальше), при получении пакета с IP-адреса источника <X> на IP-адрес назначения сервера <B> через интерфейсeth0, его можно преобразовать в SNAT так, чтобы он отображался как исходный адрес <A> (который был исходным IP-адресом источника, но эта информация утеряна) следующим образом:

iptables -t nat -A INPUT -s <X> -d <B> -i eth0 -j SNAT --to <A>

Или, используя более простой вариант:

iptables -t nat -A INPUT -s <X> -j SNAT --to <A>

Вы можете добавить больше ограничений, например -p tcp --dport XXXX(XXXX для фактического обслуживания), и вам, вероятно, следует это сделать: если вы столкнетесь с проблемой, описанной ниже, вы можете запретить себе доступ к системе через VPN. Имейте резервный метод доступа или не делайте этого удаленно, если не уверены.

Правило выше может быть недостаточным из-за маршрутизации. Если IP-адрес <A> не находится в известном маршруте к Серверу (это может произойти только в том случае, если Сервер не имеетпо умолчаниюroute). Хотя система никогда не отправит пакет обратно (IP или даже ARP) в этот пункт назначения (ответы не SNAT-активируются), маршрут к нему все равно необходим для правильной обработки стеком маршрутизации, который не знает о том, что SNAT произошел.

Так что еслиiptablesПравило выше недостаточно (вероятно, если на сервере нет маршрута по умолчанию), вы можете добавить:

  ip route add <A>/32 dev eth0

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