LINUX.ORG.RU
решено ФорумAdmin

FreeBSD IPFW 2 провайдера ядерный NAT - вопрос.

 , ,


0

1

Друзья, помогите разобраться и советом. Есть 2 провайдера IPS1, IPS2, шлюз по умолчанию стоит от IPS1. Ядро собрано с дивертами, NATами и т.д., конфигурация IPFW следующая:

#!/bin/sh -
fwcmd="/sbin/ipfw -q"

ips1="em0"
ips2="em1"

${fwcmd} -f flush

# allow ssh on all interface
${fwcmd} add allow tcp from any to me 2211 in via ${ips1}
${fwcmd} add allow tcp from any to me 2211 in via ${ips2}

# network address translation
${fwcmd} add fwd 195.111.111.111 ip from 195.151.111.112 to any
${fwcmd} add fwd 62.117.222.222 ip from 62.117.222.223 to any

${fwcmd} nat 1 config if ${ips1} reset deny_in same_ports unreg_only redirect_port tcp 192.168.ххх.ххх:2900 2900

${fwcmd} nat 2 config if ${ips2} reset deny_in same_ports unreg_only redirect_port tcp 192.168.ххх.ххх:2900 2900

${fwcmd} add nat 1 all from any to any
${fwcmd} add nat 2 all from any to any

# Deny all
${fwcmd} add deny all from any to any

Где 195.111.111.111 это шлюз IPS1, 195.111.111.112 IP внешний выданный IPS1. 62.117.222.222 это шлюз IPS2, 62.117.222.223 IP внешний выданный IPS2.

Собственно все работает, по SSH я соединяюсь и по первому и по второму адресу, все натируется, но... я и сам понимаю что после строки ${fwcmd} add nat 1 all from any to any далее уже ничего не происходит, то есть когда я подключаюсь по второму адресу, ответ приходит от первого. Наверное так? Я пробовал ставить в sysctrl net.ip.fw.one_pass=0, но тогда ничего вообще не работает. Подскажите что не так?

Задача собственно что бы с обоих провайдеров были доступны сервисы которые передаются через redirect_port. То есть при соединении по обоим внешним адресам, мы попадали на один и тот же внутренний.

P.s. Я специально убрал все другие правила что бы не было много воды... Не понимаю что ещё нужно докрутить. Понимаю что после равила первого ната на второй уже пакеты не идут, а как их туда развернуть, не понимаю... (

Я бы разделил нат для исходящего трафика из локалки и redirect_port. Чтобы исходящие пакеты корректно матчились.

Тогда наверное сперва не помешает что-нибудь вроде

ipfw add nat $RDR1 ip from any to me 2900 in via ${isp1}
ifpw add nat $RDR2 ip from any to me 2900 in via ${isp2}
А уже затем
ifpw add nat $RDR1 ip from 192.168.0.0/16 2900 to any in via ${int}
ipfw add nat $RDR2 ip from 192.168.0.0/16 2900 to any in via ${int}
ipfw add nat $DNAT1 ip from any to any via ${isp1}
ipfw add nat $DNAT2 ip from any to any via ${isp2}

Ну а то, через кого поедет трафик локалки, рулить маршрутами.

baka-kun ★★★★★ ()

Вообщем, после прочтения man setfib и танцев с бубном вокруг ipfw, все завелось. В итоге, есть 3 провайдера и одна локалка, все бегает, пакеты идут по своим путям, проброс портов работает на всех трех провайдерах через ядерный NAT. Задача решена.

yakunin ()
Ответ на: комментарий от synatash

Все дело в setfib нужно убрать из rc.conf default_gateway и прописать скажем в файл rc.local добавление машрутов следующим образом:

setfib 0 add default 111.111.111.111 setfib 1 add default 222.222.222.222

и т.д., после этого можете проверять хождение пакетов через ping следующим образом:

setfib 0 ping mail.ru соотвественно через первого провайдера setfib 1 ping mail.ru соотвественно через второго провайдера

Все. Настройка IPFW это уже вопрос религии. Можете использовать PF или что угодно.

yakunin ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.