Назад | Перейти на главную страницу

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

У меня есть сервер (S1) внутри локальной сети, а маршрутизатор находится вне моего контроля. На сервере установлен openvpn, и я могу войти в него по ssh. В локальной сети есть еще один сервер (S2), и я хочу перенаправить порт S2 на порт S1.

Если я сделаю

sudo iptables -t nat -A PREROUTING  -p tcp -m tcp -d S1 --dport 8001 -j DNAT --to-destination S2:80

а затем попробуйте подключить S1: 8001 с моего компьютера, подключенного к интерфейсу локальной сети S1:

IP **my_vpn_ip**.48174 > S2.80: Flags [S], seq 4243753453, win 14600, options [mss 1368,sackOK,TS val 89266048 ecr 0,nop,wscale 7], length 0

Очевидно, это не работает, так как S2 не имеет маршрута к моему компьютеру и не может отправить ответ. Можно ли подменить источник на S1, чтобы получить обратно пакеты, а затем выполнить NAT?

На S2 невозможно изменить маршруты, так как это IP-камера с очень ограниченными функциями.

Настройте SNAT / Masquerading на хосте, к которому вы подключаетесь. Таким образом, ваш исходный адрес будет изменен, чтобы он выглядел как прокси, исходящий из окна NAT.

Такое простое правило может делать то, что вы хотите.

iptables -t nat -A POSTROUTING --destination S2 -j MASQ