Re: FreeBSD простой NAT
От: butcher Россия http://bu7cher.blogspot.com
Дата: 26.12.13 00:57
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

Извиняюсь, если уже не актуально, давно не заходил сюда
Если не актуально, то для архива...

AB># ipfw nat 1 config if igb0 log same_ports

AB># ipfw add 100 nat 1 all from 192.168.2.2 to not me in via igb1
AB># ipfw add 200 nat 1 all from not me to me in via igb0
AB># ipfw add 300 allow ip from any to any

AB>Моя логика по правилам следующая — когда приходит пакет со 2-го сервера и он адресован не первому, то он должен попадать в NAT и уходить во внешний мир (правило 100) в противном случае правило 300. Когда приходит пакет из внешнего мира, то он попадает в правило 200 и, если нет совпадений в таблице NAT, срабатывает правило 300, в противном случае пакет отправляется на второй сервер.


На мой взгляд логика должа быть такой:
когда приходит пакет со 2-го сервера и он адресован не первому, то пакет должен сначала быть принят на входящем интерфейсе (правило 300), затем маршрутизироваться (за это отвечает gateway_enable="YES" в rc.conf — это более корректно в плане долговременных настроек, чем net.inet.ip.forwarding). Далее, когда принято решение о маршрутизации, адрес отправителя в исходящем пакете должен транслироваться в адрес сервера1.
На обратном пути входящий пакет во внешний интерфейс сервера1 должен проверяться на наличие стейта в таблице трансляции. Если стейт есть, то адрес назначения транслируется в адрес сервера2. Далее сервер1 видит, что пакет не для него и посылает его согласно таблице маршрутизации в интерфейс к серверу2. Затем он снова должен быть разрешён для отправки на исходящем интерфейсе (правило 300).
Иcходя из этой логики, я бы попробовал такие правила:
# ipfw nat 1 config if igb0 log same_ports
# ipfw add 100 nat 1 ip from 192.168.2.2 to any out xmit igb0
# ipfw add 200 nat 1 ip from any to me in recv igb0
# ipfw add 300 allow ip from any to any

Нет ничего невозможного..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.