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

Nick Kostirya nikolay.kostirya at i11.co
Thu May 7 07:19:28 EEST 2020


On Wed, 6 May 2020 17:21:16 +0200
Mykola Dzham <i at levsha.me> wrote:

> > 6 трав. 2020 р. о 15:02 Nick Kostirya <nikolay.kostirya at i11.co> написав(ла):
> > 
> > Привет.
> > 
> > Возникла дома задачка.
> > Есть сервера, на которых висят по два сервера. 
> > На один нужно ходить на прямую, на второй только через туннель.
> > Решил звернуть в туннуль по номеру порта.
> > 
> > Для ipfw прописал.
> > port="9898"
> > ${fwcmd} nat 1 config if tap0 reset same_ports
> > ${fwcmd} add nat 1 ip from any ${port} to me via tap0  
> 
> Cоветую всегда указывать in/out в правилах, чтобы понимать, что в случае транзита правило может проверяться дважды.
> Поэтому это правило лучше записать как
> 
> ${fwcmd} add nat 1 ip from any ${port} to me in recv tap0
> 
> > ${fwcmd} add nat 1 ip from me to any ${port} via tap0  
> 
> Это правило тоже лучше применять только в одном направлении. И понимать, что пока не не сработало fwd правило,  исходящий интерфейс будет тот, куда указывает роутинг, а это не обязательно tap0. Поэтому
> 
> ${fwcmd} add nat 1 ip from me to any ${port} out
> 
> > ${fwcmd} add fwd 10.1.4.1 all from me to any ${port}  
> 
> И тут тоже направление:
> 
> ${fwcmd} add fwd 10.1.4.1 all from me to any ${port} out
> > 
> > 
> > 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  
> 
> И чтобы fwd правило сработало после nat правила как они описаны выше, one_pass нужно выключить.
> 
> > В /etc/rc.conf есть
> > firewall_enable="YES"
> > firewall_nat_enable="YES"
> > firewall_script="/etc/ipfw.rules"
> > 
> > Но работает как-то через раз.  
> 
> Подозреваю что работает для транзитных пакетов, но не работает с самого сервера?
> Потому что транзитные пакеты проходят через эти правила два раза.


one_pass убрал, правила поправил.

Но работает как-то странно.

Сразу после рестрата ipfw, когда зависло:

# ipfw show
00200   0     0 nat 1 ip from any 9874 to me in via tap0
00300   4   240 nat 1 ip from me to any 9874 out
00400   4   240 fwd 10.1.4.1 tcp from me to any 9874 out
65500 115 43055 allow ip from any to any

Но подождал и ответ пришел с большой задержкой.
После ответ:

#ipfw show
00200   5   654 nat 1 ip from any 9874 to me in via tap0
00300  10   685 nat 1 ip from me to any 9874
00400  10   685 fwd 10.1.4.1 tcp from me to any 9874 out
65500 212 26630 allow ip from any to any


Перепроверил.
Да приходят все ответы. 
Иногда сразу, а иногда с большой задержкой.



More information about the freebsd mailing list