[freebsd] Завернуть запросы по номеру порта в туннел.
Привет. Возникла дома задачка. Есть сервера, на которых висят по два сервера. На один нужно ходить на прямую, на второй только через туннель. Решил звернуть в туннуль по номеру порта. Для 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] Завернуть запросы по номеру порта в туннел.
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] Завернуть запросы по номеру порта в туннел.
> 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] Завернуть запросы по номеру порта в туннел.
В письме от Срд, 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