Страница 1 из 1

2 внешних ипа 2 гетвея?

Добавлено: 2010-05-28 13:42:29
ttys
провайдер дал 2 внешних ипа, например:
1ип 1.1.1.10 гетвей 1.1.1.11
2ип 1.1.1.20 гетвей 1.1.1.21
оба ипа висят на одной WAN карте дефаулт гетвей 1.1.1.11
задача пробросить 2ип вовнутрь на внутренний ип 192.168.1.85 так чтобы он пользовал свой внешний гетвей 1.1.1.21
как это сделать?
ЗЫ вопрос в том как настроить редирект так чтобы второй внешний ип юзал свой гетвей? :st:

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-05-28 14:00:23
ttys
всё это чудо на FreeBSD 8.0-RELEASE

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-05-28 14:08:51
hizel

Код: Выделить всё

man setfib

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-06-01 6:23:36
CTOPMbI4
Можно подробнее как это реализовать

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-06-01 10:22:57
ttys
правда решил проблему поговорив с провайдером, он расширил диапазон влана, тоесть оба ипа будут в одном влане а не в двух как предпологалось раньше. соответственно и гетвей будет один на все ипы
CTOPMbI4 писал(а):Можно подробнее как это реализовать
мне тоже интересно :smile:

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-06-01 10:36:21
hizel
у ttys оказался pf и setfib ему не в масть :]

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-06-01 13:34:41
ttys
hizel писал(а):у ttys оказался pf и setfib ему не в масть :]
а как это на ipfw сделать?
ЗЫ я могу и ipfw настроить здесь пример 2х и более фаеров одновременно

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-06-01 13:52:44
thefree
hizel писал(а):у ttys оказался pf и setfib ему не в масть :]
а как же rtable

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-06-04 8:07:08
ttys
thefree писал(а):
hizel писал(а):у ttys оказался pf и setfib ему не в масть :]
а как же rtable
2 CTOPMbI4

Код: Выделить всё

маршрут по умолчанию - анлим (серый ip).

добавил таблицу 1: /sbin/route -T 1 add default ip_второго_провайдера(белый ip)

в pf.conf:

#grey ip

ext_if_g        = "rl0" #интерфейс с серым ip
ext_gw_g        = "ip_address" #адрес шлюза где серый ip

#white IP
ext_if_w        = "tun0" #интерфейс с белым ip
ext_gw_w        = "ip_address" #адрес шлюза где белый ip
ext_ip_w        = "ip_address" #мой белый ip

#lan

lan_if          = "sis0"

nat on $ext_if_w inet from ($lan_if:network) -> ($ext_if_w:0)
nat on $ext_if_g inet from ($lan_if:network) -> ($ext_if_g:0)

table <to_white_ip> persist file "/etc/to_white_ip" #в таблице список ip на которые надо идти через белый ip

pass out route-to ($ext_if_g $ext_gw_g) inet from ($ext_if_g)
pass out route-to ($ext_if_w $ext_gw_w) inet from ($ext_if_w)

pass in on $lan_if inet

pass in quick on $lan_if inet to <to_white_ip> rtable 1 #если идут в инет на ip из таблицы to_white_ip, то заворачиваю их по маршруту из таблицы 1

у меня на этом компе висит mail сервер, поэтому прописываю еще:

pass in on $ext_if_w reply-to ($ext_if_w $ext_gw_w) inet proto tcp to $ext_ip_w port smtp
pass in on $ext_if_w reply-to ($ext_if_w $ext_gw_w) inet proto { tcp udp } to $ext_ip_w port imap

Так вроде работает.
www.obsd.ru

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-06-07 15:09:16
ttys
как оказалось не сразу понятно что www.obsd.ru это сцылка
вот второй вариант http://www.obsd.ru/8/?q=node/1407 :smile:

Re: 2 внешних ипа 2 гетвея?

Добавлено: 2010-06-15 7:33:47
ttys
нашёл ещё одну статью про policy routing решение для ipfw и для pf если кому надо взял здесь (wiki.bsdportal.ru)
В данной статье рассматривется тот случай, когда на сервере имеется два сетевых интерфейса через которые, в зависимости от тех или иных обстоятельств, будет идти трафик в интернет.
Сразу оговорюсь что в данный момент времени я использую pf, а примеры с использованием ipfw приведены учитывая прошлый опыт, поэтому могут быть не столь полными. Также я надеюсь что (в случае с ipfw) имеется опыт настройки natd и соответствующих правил. Для pf также приветствуется знание синтаксиса :).

В общем случаем конфигурация используется следущая:

Код: Выделить всё

 rl0 - 10.10.10.254 (ip - шлюз провайдера №1, наш ip 10.10.10.10)
 rl1 - 20.20.20.254 (ip - шлюз провайдера №2, наш ip 20.20.20.10)
 rl2 - 30.30.30.30 (ip - адрес в локальной сети)
Приступим.
IPFW
Запускаем nat на интерфейсах:

Код: Выделить всё

 natd -a 10.10.10.10 -p 8668 
 natd -a 20.20.20.20 -p 8778
Далее создаем правила для файрвола:

Код: Выделить всё

 ipfw add divert 8668 ip from 30.30.30.100 to any 
 #в данном случае вместо 30.30.30.100 можно подставить ip тех кого пускать через данный интерфейс
 #или вместо any написать то, куда люди будут ходить через данный интерфейс
 ipfw add divert 8778 ip from 30.30.30.0/24 to any 
 #аналогично первому комментарию
 #
 #сам policy
 ipfw add fwd 10.10.10.254 ip from 10.10.10.10 to any 
 ipfw add fwd 20.20.20.254 ip from 20.20.20.10 to any 
 #возвращаем пакеты
 ipfw add divert 8668 ip from any to 10.10.10.10 
 ipfw add divert 8778 ip from any to 20.20.20.10
Привожу ещё один пример, в котором 1 пользователь ходит в сеть через первый канал и видит локальные ресурсы второго провайдера, а остальные наоборот:

Код: Выделить всё

ipfw add divert 8778 ip from 30.30.30.100 to 100.100.100.0/24 
#100.100.100.0/24 внутренняя сеть провайдера номер 1
ipfw add divert 8668 ip from 30.30.30.100 to any
ipfw add divert 8668 ip from 30.30.30.0/24 to 110.110.110.0/24
##110.110.110.0/24 внутренняя сеть провайдера номер 2
ipfw add divert 8778 ip from 30.30.30.0/24 to any
ipfw add fwd 10.10.10.254 ip from 10.10.10.10 to any
ipfw add fwd 20.20.20.254 ip from 20.20.20.10 to any
ipfw add divert 8668 ip from any to 10.10.10.10
ipfw add divert 8778 ip from any to 20.20.20.10
Вот собственно и всё.

Дописать pbr для доступа к сервисам с внешних интерфейсов и динамические правила для ipfw
PF

Теперь pf, привожу кусок моего конфига:
(в данном случае возможно придется настроить обычную маршрутизацю, в зависимости от поставленной задачи)

Код: Выделить всё

 #Внешние и внутренний интерфейсы.
 #
 ext_if_a        = "rl0" #первый провайдер
 ext_if_b        = "rl1" #второй провайдер
 int_if          = "rl2" #локалка
 #Шлюзы для каналов.
 #
 ext_gw_a        = "10.10.10.254" #для tun0
 ext_gw_b        = "20.20.20.254" #для tun1
 net             = "30.30.30.0/24" #локалка
 #TCP/UDP сервисы, обслуживаемые маршрутизатором, то к чему имеется доступ на внешних интерфейсах
 #
 tcp_svc         = "990" #как пример, что то нужно вписать иначе будет биг ошибка :)
 udp_svc         = "6000" #аналогично
 #Натим, важный момент, именно тут определяется кого куда пускать
 #Синтаксис ната, грубо говоря, таков: nat on _интерфейс_ from _откуда_ to _куда_ -> _интерфейс_или_ип_адрес
 #
 nat on $ext_if_a from {$net} -> ($ext_if_a:0)
 nat on $ext_if_b from {$net} -> ($ext_if_b:0)
 #Разрешаем сети ходить в интернет, всё остальное блокируем
 #
 block in on { $ext_if_a $ext_if_b }
 block return-rst in on { $ext_if_a $ext_if_b } proto tcp
 pass out on { $ext_if_a $ext_if_b } keep state
 #Исходящие пакеты в канал, соответствующий адресу источника. Здесь и начинается policy
 #
 pass out route-to ($ext_if_a $ext_gw_a) from ($ext_if_a) to !(self:network) \
 keep state
 pass out route-to ($ext_if_b $ext_gw_b) from ($ext_if_b) to !(self:network) \
 keep state
 #А вот policy для входящих пакетов на внешние интерфейсы
 #
 pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto udp \
 to port { $udp_svc } keep state
 pass in on $ext_if_a proto udp from ($ext_if_a:network) to port { $udp_svc } \
 keep state
 #
 pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp \
 to port { $tcp_svc } flags S/SA keep state
 pass in on $ext_if_a proto tcp from ($ext_if_a:network) to port { $tcp_svc } \
 flags S/SA keep state
 #
 pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto udp \
 to port { $udp_svc } keep state
 pass in on $ext_if_b proto udp from ($ext_if_b:network) to port { $udp_svc } \
 keep state
 #
 pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto tcp \
 to port { $tcp_svc } flags S/SA keep state
 pass in on $ext_if_b proto tcp from ($ext_if_b:network) to port { $tcp_svc } \
 flags S/SA keep state