Jump to content
Калькуляторы

pf binat одновременно на два интерфейса

Есть блок PI адресов и бордер под FreeBSD 8.2 с двумя аплинками. Аплинки заводятся в бордер в двух виланах, через один физический интерфейс.

Задача: возложить на роутер так же функцию NAT 1 к 1, желательно через pf binat.

Собственно вопрос: можно ли заставить pf натить одни и те же адреса либо на двух интерфейсах одновременно (vlan1 vlan2), либо на физическом интерфейсе em0, но при этом научить манипулировать тегированными пакетами проходящими через него?

Share this post


Link to post
Share on other sites
Собственно вопрос: можно ли заставить pf натить одни и те же адреса либо на двух интерфейсах одновременно (vlan1 vlan2), либо на физическом интерфейсе em0, но при этом научить манипулировать тегированными пакетами проходящими через него?

Посмотрите доки, там что то было про нат с роундробин и сорхэш.

ПФ, допустим, может игнорировать тэги вланов при приёме, но при отправке он их добавить не сможет - поэтому такая схема не взлетит.

Забудьте что у вас один физ интерфейс по факту, в пф вам нужно манипулировать влан интерфейсами.

Share this post


Link to post
Share on other sites

Сейчас собрал тестовый стенд, похоже достаточно просто сделать два правила, в которых различается только интерфейс.

Share this post


Link to post
Share on other sites

ммм, извините за оффтоп, но что за изврат NAT 1 к 1-му ?

мне очень инетересно, зачем это надо.

Share this post


Link to post
Share on other sites

Насколько я помню мануал, для ната и скруба срабатывает первое матч правило, остальные не обрабатываются, соответственно, второе правило срабатывать не будет.

Share this post


Link to post
Share on other sites

Сейчас собрал тестовый стенд, похоже достаточно просто сделать два правила, в которых различается только интерфейс.

Если трафик пришёл из Интернета через один интерфейс, а уходит через другой, правила работать не будут,

т.к. весь NAT в PF является stateful, даже статический 1:1. Не привязывать binat-правила к интерфейсам PF не умеет.

 

Одно из решений - переход на Линукс. В нём есть два варианта: iptables умеет

делать NAT без привязки к интерфейсу, iproute2 умеет делать stateless nat 1:1.

Share this post


Link to post
Share on other sites

 

В нём есть два варианта: iptables умеет

делать NAT без привязки к интерфейсу

 

Если не секрет, то как? Я пробовал когда-то делать такой NAT(на ядре 2.6.9), если обратный трафик приходил через другой интерфейс, то он дропался.

Share this post


Link to post
Share on other sites

Если не секрет, то как? Я пробовал когда-то делать такой NAT(на ядре 2.6.9), если обратный трафик приходил через другой интерфейс, то он дропался.

Примерно так:

for n in $LAN_IFACES; do iptables -t nat -A POSTROUTING -o $n -j ACCEPT
for n in $LAN_IFACES; do iptables -t nat -A  PREROUTING -i $n -j ACCEPT

Дальше делаем snat/dnat 1:1 без указания выходного/входного интерфейса.

И в конце либо общий iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j MASQUERADE,

либо раздельные SNAT для каждого внешнего интерфейса, либо SNAT на пул из AS.

Share this post


Link to post
Share on other sites

ну да, для 1:1 это должно работать, у меня был случай nat overload с балансировкой outside интерфейсов

Share this post


Link to post
Share on other sites

ipfw умееть натить без привязки к интерфейсам. Так у нас. Но тоже интересен вопрос, поднятый ТС, поскольку есть желание перейти на pf nat.

Ситуация схожая - два аплинка, два влана, один внешний физический интерфейс, bgp.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this