>Вот кратко описано, может поможет.
>https://www.opennet.ru/openforum/vsluhforumID10/3273.html Не, к сожалению не помогло, там описывается немного другая ситуация и проблема у вопрашающего совершенно инная.
приложу логи ipfw чтоб было хоть примерно понятно....
ipfw: 500 Divert 8661 TCP 85.114.69.201:3944 1.1.1.2:16000 in via vr0
ipfw: 2100 Accept TCP 85.114.69.201:3944 192.168.1.1:3389 in via vr0
ipfw: 1100 Accept TCP 85.114.69.201:3944 192.168.1.1:3389 out via re0
ipfw: 2000 Accept TCP 192.168.1.1:3389 85.114.69.201:3944 in via re0
ipfw: 600 Divert 8662 TCP 192.168.1.1:3389 85.114.69.201:3944 out via vr1
ipfw: 900 Forward to 2.2.2.1 TCP 2.2.2.2:16000 85.114.69.201:3944 out via vr1
ipfw: 600 Divert 8662 TCP 85.114.69.201:3944 2.2.2.2:16000 in via vr1
ipfw: 2100 Accept TCP 85.114.69.201:3944 192.168.1.1:3389 in via vr1
ipfw: 1100 Accept TCP 85.114.69.201:3944 192.168.1.1:3389 out via re0
Номера правил менялись но суть осталась таже...
1. пакет приходит на интерфейс vr0 с адресом 1.1.1.2 по порту 16000 и заворачивается divert'ом в нат. "ipfw: 500 Divert 8661 TCP 85.114.69.201:3944 1.1.1.2:16000 in via vr0"
2. Далее в соответствии с правилом redirect_port 192.168.1.1:3389 16000 он перенаправляется на 192.168.1.1:3389 "ipfw: 2100 Accept TCP 85.114.69.201:3944 192.168.1.1:3389 in via vr0"
3. обрабатывается правилом как исходящий через интерфейс смотрящий в локальную сеть на адрес 192.168.1.1:3389 "ipfw: 1100 Accept TCP 85.114.69.201:3944 192.168.1.1:3389 out via re0"
4. Машина в локальной сети получив запрос инициирует ответ на тотже самый адресс и направляет на внутренний интерфейс моего FreeBSD сервачка: "ipfw: 2000 Accept TCP 192.168.1.1:3389 85.114.69.201:3944 in via re0"
А ВОТ ТУТ ПРОИСХОДИИТ КОСЯК
5 (ТО КАК ЕСТЬ). Сервер перенаправляет пакет как исходящий в нат интерфейса шлюза по умолчанию: ipfw: 600 Divert 8662 TCP 192.168.1.1:3389 85.114.69.201:3944 out via vr1
5 (ТО КАК НАДО): Сервер должен перенаправить пакет в нат интерфейса с которого пришел запрос
Дальше собсно уже не так интересно, потому как если пакет завернеца в нат то от из натаже и уйдет в нужном направлении в соответствии с правилом "ipfw add fwd". Но вот как научить сервер перенаправлять пакеты именно туда куда я хочу? правило keep-state на интерфейс смотрящий в локалку не помогает, почему-то. Делать метку пакета тут вроде не имеет смысла, потому как пакет выходит за рамки сервера и метка пропадет, а следовательно и ответ от машины в локальной сети опять прийдет не в тот нат.