Есть у нас программист, который написал скрипт для доступа по RDP из Internet на хост внутри ЛВС. Скрипт рулит iptables и на практике не работает. При просмотре что делает скрипт - создаёт правило вида:
-A PREROUTING -s $IP_my -i $IF_INET -p tcp -m tcp --dports 3389 -j DNAT --to-destination $IP_LAN:3489
Исправление правила в ручном режиме, без выше обозначенного скрипта на:
-A PREROUTING -d $IP_my -i $IF_INET -p tcp -m tcp --dports 3389 -j DNAT --to-destination $IP_LAN:3489
Проблему решает - порт пробрасывается.
Программист утверждает что скрипт с ключом -s сможет пробросить порт также как и с ключом -d и задаёт вопрос: Что ты будешь писать в поле "-d" если твой сервер получает ip по DHCP ???
Я отвечаю: Не буду писать ключ -d, только и всего. Раз у меня нет конкретного приёмника, а есть только интерфейс. Соответственно достаточно -i $IF_INET. Какие проблемы? -s - IP-адрес источника пакета. -d - IP-адрес получателя. В DNAT подменяется адрес получателя во входящем пакете. IP-адрес источника нам, в общем случае, не известен, находится в сети Internet. Это входящий трафик, а не исходящий. Хост в ЛВС на который приходит трафик не является его источником, а является получателем. Поэтому указывать -s нельзя, из-за этого такое правило не работает.
На что получаю: Хватит отвлекать меня от работы своим незнанием iptables.
Вот и думаю. Может я действительно что-то не понимаю? Короче, кто из нас прав: может ли правило DNAT с одновременно указанными -s и -i отработать нормально. А то я даже примеров таких правил в Google не нашёл. Как и вообще правил DNAT с указанным -s вместо -d.