У меня есть сервер (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