[freebsd] Завернуть запросы по номеру порта в туннел.

Eugene Grosbein eugen at grosbein.net
Wed May 6 18:37:48 EEST 2020


06.05.2020 20:02, Nick Kostirya пишет:
> Привет.
> 
> Возникла дома задачка.
> Есть сервера, на которых висят по два сервера. 
> На один нужно ходить на прямую, на второй только через туннель.
> Решил звернуть в туннуль по номеру порта.
> 
> Для ipfw прописал.
> port="9898"
> ${fwcmd} nat 1 config if tap0 reset same_ports
> ${fwcmd} add nat 1 ip from any ${port} to me via tap0
> ${fwcmd} add nat 1 ip from me to any ${port} via tap0
> ${fwcmd} add fwd 10.1.4.1 all from me to any ${port}
> 
> 
> 10.1.4.1 - это tap0:
> inet 10.1.4.6 netmask 0xffffff00 broadcast 10.1.4.255
> 
> 
> sysctl net.inet.ip.forwarding=1
> sysctl net.inet.ip.fw.one_pass=1
> 
> 
> В /etc/rc.conf есть
> firewall_enable="YES"
> firewall_nat_enable="YES"
> firewall_script="/etc/ipfw.rules"
> 
> Но работает как-то через раз.
> 
> Может что-то не так прописал?

Да, набор правил некорректный. Во-первых, для ipfw и особенно для ipfw nat
важен порядок обработки пакетов правилами и в особенности это важно для one_pass=1,
поэтому нельзя полагаться на авто-нумерацию добавляемых правил,
всегда надо прописывать номера правил в ${fwcmd} add.
Иначе, ipfw легко может вставить правило в неверное место.

Во-вторых, нужно уточнить задачу: речь про исходящие коннекты с этой машины
к серверу, доступному через туннель? Если да, то нужно не правило ipfw fwd,
а маршрут до сервера через туннель. При one_pass=1 после срабатывания
трансляции пакет дальше не проходит по правилам ipfw и не попадает в ipfw fwd.
Это легко заметно из вывода ipfw show, там показываются счётчики срабатываний правил.

Если же речь про входящие коннекты на эту машину, то правила ещё более неверны.



More information about the freebsd mailing list