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

2020-05-06 Пенетрантность 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 0xff00 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"

Но работает как-то через раз.

Может что-то не так прописал?
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


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

2020-05-06 Пенетрантность Eugene Grosbein
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 0xff00 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, там показываются счётчики срабатываний 
правил.

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

___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


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

2020-05-06 Пенетрантность Mykola Dzham

> 6 трав. 2020 р. о 15: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

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 0xff00 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"
> 
> Но работает как-то через раз.

Подозреваю что работает для транзитных пакетов, но не работает с самого сервера?
Потому что транзитные пакеты проходят через эти правила два раза.

> Может что-то не так прописал?
> ___
> freebsd mailing list
> freebsd@uafug.org.ua
> http://mailman.uafug.org.ua/mailman/listinfo/freebsd

___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


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

2020-05-06 Пенетрантность Alexander Sheiko

В письме от Срд, 06 Май 2020, 16:02 Nick Kostirya пишет:

> ${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}

IP и port - какое-то плохое сочетание. Пишите однозначно - TCP, UDP.

-- 
Alexander Sheiko

___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd