ipfw, "2 провайдера" и входящие соединения

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение kpp » 2009-10-12 12:26:36

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

]# setfib -0 netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            212.2.135.1        UGS         0 40231880    sk0

# setfib -2 netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.1.1        UGS         0        0    rl0

ipfw show - дофига всего нужно ли, или может что-то конкретное?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение terminus » 2009-10-12 13:59:55

а там много всего? желательно бы все чтобы видеть как ирафик пойдет.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение kpp » 2009-10-12 16:01:06

С такими настройками ipfw, если установить route default 212.2.135.1 (sk0) - входящие\исходящие нормально идут через sk0 (через rl0 входящие не проходят),
если установить route default 192.168.1.1 (rl0) - входящие\исходящие нормально идут через rl0 (через sk0 входящие не проходят).

Если вставляю (до натов)

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

${fw} add 500 fwd 192.168.1.1 ip from 192.168.1.33 20,21 to not me
Входящие проходят и с sk0 и с rl0.

Если вместо строки(в тоже место) вставляю

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

${fw} add 100 skipto 300 tag 1 in recv sk0 keep-state
${fw} add 200 skipto 400 tag 2 in recv rl0 keep-state
${fw} add 300 setfib 0 tagged 1
${fw} add 400 setfib 2 tagged 2
входящие\исходящие нормально идут через sk0 (через rl0 входящие не проходят).
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение terminus » 2009-10-12 16:07:13

покажите все правила какие вы использовали когда тестировали секцию с setfib - а игаче гадать можно долго.
Тот пример что я выше нарисовал в состоянии как он есть (не модифицируя сильно) не пробовали задействовать?
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

wel
сержант
Сообщения: 170
Зарегистрирован: 2007-02-27 11:59:41

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение wel » 2009-10-17 22:03:54

terminus писал(а):one_pass=1

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

ipfw nat 1 config log if $ext_if1 same_ports reset deny_in redirect_port tcp $ext_ip1:80 80
ipfw nat 2 config log if $ext_if2 same_ports reset deny_in redirect_port tcp $ext_ip2:25 25

ipfw add 100 skipto 300 tag 1 in recv $ext_if1 keep-state
ipfw add 200 skipto 400 tag 2 in recv $ext_if2 keep-state
ipfw add 300 setfib 0 tagged 1
ipfw add 400 setfib 1 tagged 2
ipfw add 500 allow all from any to any via $int_if
ipfw add 600 nat 1 ip from any to any via $ext_if1
ipfw add 700 nat 2 ip from any to any via $ext_if2
Надо тестировать - вроде должно работать...
Такая конструкция будет запоминать из какого канала на рутер приходило соенинение, и ответ отсылать через тот же канал. Все клиенты будут ходить в интернет только через однин канал (тот на котором живет на маршрут по-умолчанию: setfib 0).
Блин так и получилось:
Все клиенты будут ходить в интернет только через однин канал (тот на котором живет на маршрут по-умолчанию: setfib 0).

Как исправить - послать нужных Мне клиентов через 1-н канал, а других через другой: из table(1) -> vlan20, 91.xxx.xxx.xxx в default ?

ipfw show

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

00001    67505502    53491754840 skipto 5 tag 1 ip from any to any in recv vlan61 keep-state
00002     4479280     5060513463 skipto 6 tag 2 ip from any to any in recv vlan20 keep-state
00005    81856841    61218996370 setfib 0 ip from any to any tagged 1
00006    13205573    15295799291 setfib 1 ip from any to any tagged 2
00007     4455086     5054890557 nat 123 ip from any to 91.ххх.ххх.ххх in via vlan20 tagged 2
00008      494650       41925439 deny ip from any to any dst-port 137-141
00010           0              0 deny ip from table(4) to any dst-port 25
64000     3175045      776282256 nat 123 ip from table(1) to any out
65535 34577394603 24841735869542 allow ip from any to any

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение kpp » 2009-10-19 11:30:17

Я понял что этот вариант с tag - ами не работает.

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

${fw} add 100 skipto 300 tag 1 in recv sk0 keep-state
${fw} add 200 skipto 400 tag 2 in recv rl0 keep-state
${fw} add 300 setfib 0 tagged 1
${fw} add 400 setfib 2 tagged 2
Попробую сырцы подправить по статье http://nuclight.livejournal.com/124348.html и пересобрать ядро.
Других вариантов не вижу.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

wel
сержант
Сообщения: 170
Зарегистрирован: 2007-02-27 11:59:41

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение wel » 2009-11-07 16:32:42

В общем после того как Я посмотрел на увеличение нагрузки от keep-state на ~30%, Я просто отказался от этой затеи...
Мне стало легче поднять 2-ой нат и на основании адреса источника(в dns для одних vpn.server -> один ип, для других ->другой) на разные сервера гнать людей

rumata
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-11-27 18:32:41

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение rumata » 2009-11-27 19:17:27

Незнаю нужно кому нибудь это решение или нет, но все же (не зря же два дня воевал):

Имеется шлюз на FreeBSD 7.2 с двумя выходами в интернет (sk0, IP 10.10.10.10 шлюз 10.10.10.11 и второй sk1, IP 20.20.20.20 шлюз 20.20.20.21) и локальная сеть (re0, IP 192.168.7.1) в которой, помимо рабочих станций, находятся сервера, на которые надо пробросить порты извне (есть еще задача разруливать выход в интернет по разным провайдерам, так как у одного хорошие каналы заграницу, у другого по России, задача решена, но здесь не затрагивается, чтобы не загромождать сообщение).

И при этом сильно хотелось, чтобы и сам шлюз (HTTP, SSH) и внутренние сервера были доступны по обоим внешним адресам.
Были безуспешно перепробованы варианты из данного топика, но все таки решение было найдено. Попытаюсь его рассказать пошагово:

Шаг номер один:
NAT, я пользовался natd, и изначально пробовал запускать два экземпляра, но такой вариант не подходит, мы будем запускать один natd для двух каналов. Делается следующим образом

файл /etc/rc.conf (заметьте что здесь не указывается интерфейс)

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

natd_program="/sbin/natd"
natd_enable="YES"
natd_flags="-f /etc/natd.conf"
вот конфиг /etc/natd.conf

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

log

instance default
interface sk0
port 8668
redirect_port tcp 192.168.7.8:15000 15000
redirect_port udp 192.168.7.8:15000 15000

instance Second_ISP
interface sk1
port 8669
redirect_port tcp 192.168.7.8:15000 15000
redirect_port udp 192.168.7.8:15000 15000

globalport 8670
Коментарий: обязятельно должна быть instance default! В моем случае это первый провайдер, для него нат отвечает по порту 8668, instance Second_ISP это мой второй провайдер, нат на порту 8669, и еще задается globalport на порту 8670, как правильно назвать не знаю, но дальше поймете.

Конфигурация IPFW:

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

#Запрещаем порты 135,445 и разрешаем SSH
${fwcmd} add 330 deny tcp from any to any 135,445
${fwcmd} add 340 allow tcp from any to any 22

#Следующие две строки нужны чтобы сам шлюз был доступен по обоим адресам, то есть с какого адреса идет 
# пакет от шлюза, в тот интерфейс и уходил
${fwcmd} add 350 fwd 10.10.10.11 ip from 10.10.10.10 to not 192.168.7.0/24
${fwcmd} add 360 fwd 20.20.20.21 ip from 20.20.20.20 to not 192.168.7.0/24

#Далее шесть строк разделяют весь трафик по интерфейсам и напрвлениям, для удобства
${fwcmd} add 400 skipto 1000 all from any to any in recv re0
${fwcmd} add 450 skipto 2000 all from any to any out xmit re0
${fwcmd} add 500 skipto 3000 all from any to any in recv sk0
${fwcmd} add 550 skipto 4000 all from any to any out xmit sk0
${fwcmd} add 600 skipto 5000 all from any to any in recv sk1
${fwcmd} add 650 skipto 6000 all from any to any out xmit sk1

# Local INBOUND (разрешено все, ограничения добавлять по вкусу) 
${fwcmd} add 1000 allow all from any to any

# Local OUTBOUND (разрешено все, ограничения добавлять по вкусу)
${fwcmd} add 2000 allow all from any to any

# ISP1 INBOUND (входящий трафик засовываем в нужный порт natd, после разрешаем все)
${fwcmd} add 3000 divert 8668 ip from any to 10.10.10.10
${fwcmd} add 3010 allow all from any to any

# ISP1 OUTBOUND (здесь самое интересное, симметрично для двух провадеров, распишу подробно по одному)
# первая строка запихиваем пакет в natd  по порту globalport
${fwcmd} add 4000 divert 8670 ip from 192.168.7.0/24 to any
# если есть запись трянсляции подключения снаружи вовнутрь, то natd  модифицирует
# пакет и ставит адресом источника тот внешний адрес, на который производилось подключение
# если это адрес первого провайдера, то далее просто разрешаем пакет и на этом обработка заканчивается
${fwcmd} add 4010 allow all from 10.10.10.10 to any
# если это адрес второго провайдера, то мы форвардим пакет на шлюз второго провайдера,
# и на этом обработка опять же заканчивается
${fwcmd} add 4020 fwd 20.20.20.21 ip from 20.20.20.20 to any
# если же natd вернул неизмененный пакет, то это значит что данный пакет не относится к подключению 
# извне, и мы должны засунуть его в соответствующий порт natd 
${fwcmd} add 4030 divert 8668 ip from 192.168.7.0/24 to any
# после чего разрешаем прохождение пакета и на этом обработка опять же заканчивается
${fwcmd} add 4040 allow all from any to any

# для второго провайдера все симметрично, подробно описывать не буду
# ISP2 INBOUND 
${fwcmd} add 5000 divert 8669 ip from any to 20.20.20.20
${fwcmd} add 5010 allow all from any to any

# ISP2 OUTBOUND 
${fwcmd} add 6000 divert 8670 ip from 192.168.7.0/24 to any
${fwcmd} add 6010 allow all from 20.20.20.20 to any
${fwcmd} add 6020 fwd 10.10.10.11 ip from 10.10.10.10 to any
${fwcmd} add 6030 divert 8669 ip from 192.168.7.0/24 to any
${fwcmd} add 6040 allow all from any to any
На этом вроде как все, заметьте что все правила написаны одинаково для двух провайдеров, и в принципе вы можете менять default маршрут между ними и все будет работать.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение terminus » 2009-11-30 2:00:48

Мне вот вдруг почему-то очень захотелось "на слабо" такое же на ipfw nat сделать. :smile:

Модификация пятого примера:

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

add 1010 prob 0.5 skipto 1060 ip from any to any in recv fxp0

add 1011 skipto 1040 ip from any to any out xmit fxp0 tagged 1
add 1012 skipto 1060 ip from any to any out xmit fxp0 tagged 2

add 1040 setfib 0 ip from any to any via fxp0 keep-state
add 1050 allow ip from any to any via fxp0

add 1060 setfib 1 ip from any to any via fxp0 keep-state
add 1070 allow ip from any to any via fxp0

add 1080 deny ip from any to 192.168.0.0/16 in recv em0
add 1081 deny ip from any to 192.168.0.0/16 in recv em1
add 1090 deny ip from 192.168.0.0/16 to any in recv em0
add 1091 deny ip from 192.168.0.0/16 to any in recv em1
add 10100 deny ip from any to 172.16.0.0/12 in recv em0
add 10101 deny ip from any to 172.16.0.0/12 in recv em1
add 10110 deny ip from 172.16.0.0/12 to any in recv em0
add 10111 deny ip from 172.16.0.0/12 to any in recv em1
add 10120 deny ip from any to 10.0.0.0/8 in recv em0
add 10121 deny ip from any to 10.0.0.0/8 in recv em1
add 10130 deny ip from 10.0.0.0/8 to any in recv em0
add 10131 deny ip from 10.0.0.0/8 to any in recv em1
add 10140 deny ip from any to 169.254.0.0/16 in recv em0
add 10141 deny ip from any to 169.254.0.0/16 in recv em1
add 10150 deny ip from 169.254.0.0/16 to any in recv em0
add 10151 deny ip from 169.254.0.0/16 to any in recv em1

pipe 1 config bw 10Mbit/s queue 60 gred 0.002/10/30/0.1
queue 1 config pipe 1 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

pipe 2 config bw 10Mbit/s queue 60 gred 0.002/10/30/0.1
queue 2 config pipe 2 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

pipe 3 config bw 20Mbit/s queue 60 gred 0.002/10/30/0.1
queue 3 config pipe 3 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

pipe 4 config bw 35Mbit/s queue 60 gred 0.002/10/30/0.1
queue 4 config pipe 4 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

nat 1 config log if em0 same_ports reset deny_in redirect_port tcp 192.168.1.5:25 25
nat 2 config log if em1 same_ports reset deny_in redirect_port tcp 192.168.1.5:25 25

add 10160 queue 1 ip from any to any out xmit em0
add 10170 nat 1 ip from any to any via em0
add 10171 skipto 10180 tag 1 ip from any to any in recv em0
add 10180 queue 2 ip from any to any in recv em0

add 10190 queue 3 ip from any to any out xmit em1
add 10200 nat 2 ip from any to any via em1
add 10201 skipto 10210 tag 2 ip from any to any in recv em1
add 10210 queue 4 ip from any to any in recv em1

add 10220 allow all from any to any

add 65534 deny all from any to any
Должно работать... :smile:
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение kpp » 2009-12-19 18:00:58

terminus писал(а):Мне вот вдруг почему-то очень захотелось "на слабо" такое же на ipfw nat сделать. :smile:

Модификация пятого примера:

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

add 1010 prob 0.5 skipto 1060 ip from any to any in recv fxp0

add 1011 skipto 1040 ip from any to any out xmit fxp0 tagged 1
add 1012 skipto 1060 ip from any to any out xmit fxp0 tagged 2

add 1040 setfib 0 ip from any to any via fxp0 keep-state
add 1050 allow ip from any to any via fxp0

add 1060 setfib 1 ip from any to any via fxp0 keep-state
add 1070 allow ip from any to any via fxp0
...
Должно работать... :smile:
Не работает.
Даже при исправлении второго fxp0.
Я попробовал сделать как описано в статье http://nuclight.livejournal.com/124348.html.
Подправил сырцы, пересобрал ядро, но чуда не произошло.

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

${fw} add 100 skipto 300 tag 1 in recv sk0 keep-state
${fw} add 200 skipto 400 tag 2 in recv rl0 keep-state
${fw} add 300 setfib 0 tagged 1
${fw} add 400 setfib 2 tagged 2
Не работает в принципе. К тому же перестало работать и

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

add fwd ${ip_net4_gate} ip from ${ip_net4} 20,21,80 to not me
Пришлось откатиться назад.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение terminus » 2009-12-19 23:25:03

Я только что поднял свой зад с дивана, надыбал три компа (два обычных по одной сетевухе в каждом, третий с тремя сетевухами), и повторил свой пример. В лабораторных условиях при сети из 3х компов - один комп играет роль внешнего клиента, второй нат, ну а третий это ssh сервер на который с ната идет мапинг портов с обеих внешних адресов. Пример работал отлично - порты для ssh пробрасывались с внешних интресфейсов на внутреннюю машину без проблем.

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

1.1.1.24(клиент)
|
|             2.2.2.24(клиент)
|             |
|             |
_______________
1.1.1.1     2.2.2.2

    192.168.1.1
_______________
           |
           |
   192.168.1.2
У меня пока нет возможности сделать эксперимент по уму - чтобы "внешний" клиент был не в том же сабнете, что и адаптер самого рутера, а чтобы он находился где-нить за default gateway.

В общем у меня так заработало... Как вы тестировали?
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение terminus » 2009-12-20 0:43:04

В общем, я таки нашел еще один девайс и сделал такую вот "мега сеть":

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

3.3.3.24(клиент)
|
|
__________
3.3.3.3

1.1.1.254
__________
|
|
|             2.2.2.254
|             |
|             |
_______________
1.1.1.1     2.2.2.2

    192.168.1.1
_______________
           |
           |
   192.168.1.2(telnet сервер)
192.168.1.2 - девайс с telnet доступом. У него в настройкак как рутер прописан 192.168.1.1

на 192.168.1.1 маршрут по-умолчанию (fib 0) идет через 2.2.2.254. Второй маршрут для fib 1 идет через 1.1.1.254.

1.1.1.254 - просто рутер.

3.3.3.24 клиент в настройках которого прописано, что default gateway у него это 3.3.3.3.

С 3.3.3.24 отлично шло соединение на 1.1.1.1:23 (читай нат на 192.168.1.2). Таким образом мой пример работает.

---

Единственное, что не работает - соединения на порты самого нат сервера "с обоих провайдеров". Если конектится на 1.1.1.1:22 от 3.3.3.24 то, как и следовало ожидать, нифига не происходит так как sshd на 1.1.1.1 использует fib по-умолчанию, и шлет ответы через 2.2.2.254.

Рассказывайте, в общем, как и что вы проверяли.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение kpp » 2009-12-20 1:01:28

terminus писал(а): ...

Единственное, что не работает - соединения на порты самого нат сервера "с обоих провайдеров". Если конектится на 1.1.1.1:22 от 3.3.3.24 то, как и следовало ожидать, нифига не происходит так как sshd на 1.1.1.1 использует fib по-умолчанию, и шлет ответы через 2.2.2.254.

...
Так ведь это и нужно, чтобы с обоих провайдеров заходить на тотже ssh.

Есть сервер, у него два канала в инет.
С инета нужно иметь возможность равноценно работать со службами сервера(фтп-сервер, ssh, веб-сервер и прочее).
Проблема в том, что отвечает наш сервер на шлюз по умолчанию, а не на тот шлюз, откуда пришли пакеты.
Пока эту проблему я решил так:

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

add fwd ${ip_net2_gate} ip from ${ip_net2} 20,21,${ssh_port} to not me
Но это не есть хорошо...
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение terminus » 2009-12-20 1:42:01

Ну тогда ясно. Если бы работала нормально связка keep-state + fwd то можно было бы попробовать "изебнуться" с ними, но так как там че-то патчить надо, то интереса не так много. А по-другому скорее всего и не сделать.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение kpp » 2009-12-20 19:00:28

Да я уже и патчил - без результата.
Есть вариант что что-то не так пропатчил, конечно...
Вообще как-то странно: неужели у всех только один канал в инет и он никогда не падает?
И что делают все если он все-таки падает?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

rumata
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-11-27 18:32:41

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение rumata » 2009-12-20 20:59:22

А тот вариант который я предложил вас не устраивает?

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение dmtr » 2010-11-30 17:18:35

В приниципе есть рабочий вариант
fwd 192.168.1.1 ip from 192.168.1.33 to not me
Но, тесты показали,что на этом правиле пакеты уходят из фаера, т.е. получается все разрешено.
Пока эту проблему я решил так:

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

add fwd ${ip_net2_gate} ip from ${ip_net2} 20,21,${ssh_port} to not me
Но это не есть хорошо...
уходят из фаера, уходят с интерфейса, приходят на провайдеровский шлюз и идут куда мы и хотим.
объясните, ЧЕМ "не есть хорошо" и ЧТО "все разрешено"?
This game has no name. It will never be the same.

iakiz
проходил мимо
Сообщения: 8
Зарегистрирован: 2011-09-13 9:46:43

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение iakiz » 2011-09-13 19:54:37

Есть сервер, у него два канала в инет.
С инета нужно иметь возможность равноценно работать со службами сервера(фтп-сервер, ssh, веб-сервер и прочее).
Проблема в том, что отвечает наш сервер на шлюз по умолчанию, а не на тот шлюз, откуда пришли пакеты.
Пока эту проблему я решил так:

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

add fwd ${ip_net2_gate} ip from ${ip_net2} 20,21,${ssh_port} to not me
Но это не есть хорошо...[/quote]
Анологичная ситуация Это правило работает только для сервисов крутящихся на фре, в моем случае пакеты по редеректу в локалку после диверта всеравно уходили через default router. На днях попроубую пошаманить с natd по совету товарища rumata
Патчил вот такой вот методой - тоже не помогло.

В FreeBSD 8.1 поломали sysctl one_pass, поэтому для того чтобы трафик после ната уходил в интернет надо
...................
в файле /usr/src/sys/netinet/ipfw/ip_fw_pfil.c найдите строчку case IP_FW_NAT: и добавте после неё
        if (V_fw_one_pass)
            break;
        goto again; получится должно примерно так
      case IP_FW_NAT:
        if (V_fw_one_pass)
            break;
        goto again;

      case IP_FW_REASS:
          goto again;        /* continue with packet */
Затем пересоберите ядро после чего one_pass работает как положено.

iakiz
проходил мимо
Сообщения: 8
Зарегистрирован: 2011-09-13 9:46:43

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение iakiz » 2011-09-14 12:52:35

метода товарища rumata работает )) он молодец

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение harmless » 2012-05-03 14:48:35

rumata писал(а):Незнаю нужно кому нибудь это решение или нет, но все же (не зря же два дня воевал):

Имеется шлюз на FreeBSD 7.2 с двумя выходами в интернет (sk0, IP 10.10.10.10 шлюз 10.10.10.11 и второй sk1, IP 20.20.20.20 шлюз 20.20.20.21) и локальная сеть (re0, IP 192.168.7.1) в которой, помимо рабочих станций, находятся сервера, на которые надо пробросить порты извне (есть еще задача разруливать выход в интернет по разным провайдерам, так как у одного хорошие каналы заграницу, у другого по России, задача решена, но здесь не затрагивается, чтобы не загромождать сообщение).

И при этом сильно хотелось, чтобы и сам шлюз (HTTP, SSH) и внутренние сервера были доступны по обоим внешним адресам.
Были безуспешно перепробованы варианты из данного топика, но все таки решение было найдено. Попытаюсь его рассказать пошагово:

Шаг номер один:
NAT, я пользовался natd, и изначально пробовал запускать два экземпляра, но такой вариант не подходит, мы будем запускать один natd для двух каналов. Делается следующим образом

файл /etc/rc.conf (заметьте что здесь не указывается интерфейс)

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

natd_program="/sbin/natd"
natd_enable="YES"
natd_flags="-f /etc/natd.conf"
вот конфиг /etc/natd.conf

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

log

instance default
interface sk0
port 8668
redirect_port tcp 192.168.7.8:15000 15000
redirect_port udp 192.168.7.8:15000 15000

instance Second_ISP
interface sk1
port 8669
redirect_port tcp 192.168.7.8:15000 15000
redirect_port udp 192.168.7.8:15000 15000

globalport 8670
Коментарий: обязятельно должна быть instance default! В моем случае это первый провайдер, для него нат отвечает по порту 8668, instance Second_ISP это мой второй провайдер, нат на порту 8669, и еще задается globalport на порту 8670, как правильно назвать не знаю, но дальше поймете.

Конфигурация IPFW:

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

#Запрещаем порты 135,445 и разрешаем SSH
${fwcmd} add 330 deny tcp from any to any 135,445
${fwcmd} add 340 allow tcp from any to any 22

#Следующие две строки нужны чтобы сам шлюз был доступен по обоим адресам, то есть с какого адреса идет 
# пакет от шлюза, в тот интерфейс и уходил
${fwcmd} add 350 fwd 10.10.10.11 ip from 10.10.10.10 to not 192.168.7.0/24
${fwcmd} add 360 fwd 20.20.20.21 ip from 20.20.20.20 to not 192.168.7.0/24

#Далее шесть строк разделяют весь трафик по интерфейсам и напрвлениям, для удобства
${fwcmd} add 400 skipto 1000 all from any to any in recv re0
${fwcmd} add 450 skipto 2000 all from any to any out xmit re0
${fwcmd} add 500 skipto 3000 all from any to any in recv sk0
${fwcmd} add 550 skipto 4000 all from any to any out xmit sk0
${fwcmd} add 600 skipto 5000 all from any to any in recv sk1
${fwcmd} add 650 skipto 6000 all from any to any out xmit sk1

# Local INBOUND (разрешено все, ограничения добавлять по вкусу) 
${fwcmd} add 1000 allow all from any to any

# Local OUTBOUND (разрешено все, ограничения добавлять по вкусу)
${fwcmd} add 2000 allow all from any to any

# ISP1 INBOUND (входящий трафик засовываем в нужный порт natd, после разрешаем все)
${fwcmd} add 3000 divert 8668 ip from any to 10.10.10.10
${fwcmd} add 3010 allow all from any to any

# ISP1 OUTBOUND (здесь самое интересное, симметрично для двух провадеров, распишу подробно по одному)
# первая строка запихиваем пакет в natd  по порту globalport
${fwcmd} add 4000 divert 8670 ip from 192.168.7.0/24 to any
# если есть запись трянсляции подключения снаружи вовнутрь, то natd  модифицирует
# пакет и ставит адресом источника тот внешний адрес, на который производилось подключение
# если это адрес первого провайдера, то далее просто разрешаем пакет и на этом обработка заканчивается
${fwcmd} add 4010 allow all from 10.10.10.10 to any
# если это адрес второго провайдера, то мы форвардим пакет на шлюз второго провайдера,
# и на этом обработка опять же заканчивается
${fwcmd} add 4020 fwd 20.20.20.21 ip from 20.20.20.20 to any
# если же natd вернул неизмененный пакет, то это значит что данный пакет не относится к подключению 
# извне, и мы должны засунуть его в соответствующий порт natd 
${fwcmd} add 4030 divert 8668 ip from 192.168.7.0/24 to any
# после чего разрешаем прохождение пакета и на этом обработка опять же заканчивается
${fwcmd} add 4040 allow all from any to any

# для второго провайдера все симметрично, подробно описывать не буду
# ISP2 INBOUND 
${fwcmd} add 5000 divert 8669 ip from any to 20.20.20.20
${fwcmd} add 5010 allow all from any to any

# ISP2 OUTBOUND 
${fwcmd} add 6000 divert 8670 ip from 192.168.7.0/24 to any
${fwcmd} add 6010 allow all from 20.20.20.20 to any
${fwcmd} add 6020 fwd 10.10.10.11 ip from 10.10.10.10 to any
${fwcmd} add 6030 divert 8669 ip from 192.168.7.0/24 to any
${fwcmd} add 6040 allow all from any to any
На этом вроде как все, заметьте что все правила написаны одинаково для двух провайдеров, и в принципе вы можете менять default маршрут между ними и все будет работать.
Привет всем!
Вот пытаюсь сделать тоже самое но с ядрёным натом.
Вот к чему дошел:

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

#!/bin/sh

#############################################
#**************** FireWall *****************#
#############################################

FwCMD="/sbin/ipfw -q "
FwTable="${FwCMD} table "
FwPipe="${FwCMD} pipe "

#############################################
echo "Disable one_pass"
${FwCMD} disable one_pass

echo "Set rule step to 1"
/sbin/sysctl net.inet.ip.fw.autoinc_step=1

echo "Set default GW in route table 0 192.168.2.1"
/usr/sbin/setfib -0 route add default 192.168.2.1

echo "Set default GW in route table 1 192.168.1.1"
/usr/sbin/setfib -1 route add default 192.168.1.1

################# CLEAN ALL #################

${FwCMD} -f		flush
${FwCMD} -f pipe	flush
${FwCMD} -f queue	flush
${FwCMD} -f sched	flush

${FwCMD} nat 1		config	log if em0 same_ports reset #deny_in
${FwCMD} nat 2		config	log if em1 same_ports reset #deny_in

#*******************************************#
${FwCMD} add 1		reass												in
${FwCMD} add		deny				{ src-ip 127.0.0.0/8 or dst-ip 127.0.0.0/8 }	not via lo0
${FwCMD} add		deny			icmp	from any to any						frag
${FwCMD} add		deny			icmp	from any to any						in icmptypes 5,9,13,14,15,16,17
${FwCMD} add		deny				dst-ip me							ipoptions ssrr,lsrr,rr,ts
${FwCMD} add		reject			tcp	from any to any					{ tcpflags syn,fin,ack,psh,rst,urg or tcpflags !syn,!fin,!ack,!psh,!rst,!urg }
${FwCMD} add		reject			tcp	from any to any					tcpflags fin not established
${FwCMD} add		deny			icmp	from any to 255.255.255.255			{ via em0 or via em1 }
${FwCMD} add		reject log logamount 10000							{ not verrevpath or not antispoof } in via em0
${FwCMD} add		skipto 1000										in via lo0
${FwCMD} add		skipto 1500										out via lo0
${FwCMD} add		skipto 2000										in via em0
${FwCMD} add		skipto 2500										out via em0
${FwCMD} add		skipto 3000										in via em1
${FwCMD} add		skipto 3500										out via em1
${FwCMD} add		skipto 4000										in via em2
${FwCMD} add		skipto 4500										out via em2
${FwCMD} add 1000	allow											in via lo0
${FwCMD} add 1500	allow											out via lo0
${FwCMD} add 2000	nat 1				dst-ip 192.168.2.2					in via em0
${FwCMD} add		allow			dst-ip 192.168.2.2					in via em0
${FwCMD} add 2500	nat global			src-ip 10.0.0.0/8					out via em0
${FwCMD} add		fwd 192.168.1.1	src-ip 192.168.1.2					out via em0
${FwCMD} add		allow			src-ip 192.168.2.2					out via em0
${FwCMD} add		nat 1				src-ip 10.0.0.0/8					out via em0
${FwCMD} add		allow			src-ip 192.168.2.2					out via em0
${FwCMD} add 3000	nat 2				dst-ip 192.168.1.2					in via em1
${FwCMD} add		allow			dst-ip 192.168.1.2					in via em1
${FwCMD} add 3500	nat global			src-ip 10.0.0.0/8					out via em1
${FwCMD} add		fwd 192.168.2.1	src-ip 192.168.2.2					out via em0
${FwCMD} add		allow			src-ip 192.168.1.2					out via em1
${FwCMD} add		nat 2				src-ip 10.0.0.0/8					out via em1
${FwCMD} add		allow			src-ip 192.168.1.2					out via em0
${FwCMD} add 4000	allow											in via em2
${FwCMD} add 4500	allow											out via em2
${FwCMD} add 65534	deny			all	from any to any
Вроде бы все работает, осталось теперь балансировку нарисовать)

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение harmless » 2012-05-04 3:20:10

Всем привет еще раз!
В общем сделал я эту злое...чую балансировку

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

#!/bin/sh

#############################################
#**************** FireWall *****************#
#############################################

FwCMD="/sbin/ipfw -q "
FwTable="${FwCMD} table "
FwPipe="${FwCMD} pipe "

#############################################
echo "Disable one_pass"
${FwCMD} disable one_pass

echo "Enable ip forwarding"
/sbin/sysctl net.inet.ip.forwarding=1

echo "Enable ip fastforwarding"
/sbin/sysctl net.inet.ip.fastforwarding=1

echo "Set rule step to 1"
/sbin/sysctl net.inet.ip.fw.autoinc_step=1

echo "Set default GW in route table 0 192.168.2.1"
/usr/sbin/setfib -0 route add default 192.168.2.1
echo "Set default GW in route table 1 192.168.1.1"
/usr/sbin/setfib -1 route add default 192.168.1.1

################# CLEAN ALL #################

${FwCMD} -f             flush
${FwCMD} -f pipe        flush
${FwCMD} -f queue       flush
${FwCMD} -f sched       flush

${FwCMD} nat 1          config  log if em0 same_ports reset redirect_port tcp 10.0.0.2:3389 3389 deny_in
${FwCMD} nat 2          config  log if em1 same_ports reset redirect_port tcp 10.0.0.2:3389 3389 deny_in

#*******************************************#
${FwCMD} add 1          reass                                                                   in
${FwCMD} add            deny                            { src-ip 127.0.0.0/8 or dst-ip 127.0.0.0/8 }    not via lo0
${FwCMD} add            deny                    icmp    from any to any                         frag
${FwCMD} add            deny                    icmp    from any to any                         in icmptypes 5,9,13,14,15,16,17
${FwCMD} add            deny                            dst-ip me                               ipoptions ssrr,lsrr,rr,ts
${FwCMD} add            reject                  tcp     from any to any                         { tcpflags syn,fin,ack,psh,rst,urg or tcpflags !syn,!fin,!ack,!psh,!rst,!urg }
${FwCMD} add            reject                  tcp     from any to any                         tcpflags fin not established
${FwCMD} add            deny                    icmp    from any to 255.255.255.255             { via em0 or via em1 }
${FwCMD} add 100        skipto 1000                                                             in via lo0
${FwCMD} add            skipto 1500                                                             out via lo0
${FwCMD} add            skipto 2000                                                             in via em0
${FwCMD} add            skipto 2500                                                             out via em0
${FwCMD} add            skipto 3000                                                             in via em1
${FwCMD} add            skipto 3500                                                             out via em1
${FwCMD} add            skipto 4000                                                             in via em2
${FwCMD} add            skipto 4500                                                             out via em2
${FwCMD} add 1000       allow                                                                   in via lo0
${FwCMD} add 1500       allow                                                                   out via lo0
${FwCMD} add 2000       nat 1                           dst-ip 192.168.2.2                      in via em0
${FwCMD} add            allow                           dst-ip 192.168.2.2                      in via em0
${FwCMD} add 2500       nat global                      src-ip 10.0.0.0/8                       out via em0
${FwCMD} add            fwd 192.168.1.1                 src-ip 192.168.1.2
${FwCMD} add            allow                           src-ip 192.168.2.2                      out via em0
${FwCMD} add            nat 1                           src-ip 10.0.0.0/8                       out via em0
${FwCMD} add            allow                           src-ip 192.168.2.2                      out via em0
${FwCMD} add 3000       nat 2                           dst-ip 192.168.1.2                      in via em1
${FwCMD} add            allow                           dst-ip 192.168.1.2                      in via em1
${FwCMD} add 3500       nat global                      src-ip 10.0.0.0/8                       out via em1
${FwCMD} add            fwd 192.168.2.1                 src-ip 192.168.2.2
${FwCMD} add            allow                           src-ip 192.168.1.2                      out via em1
${FwCMD} add            nat 2                           src-ip 10.0.0.0/8                       out via em1
${FwCMD} add            allow                           src-ip 192.168.1.2                      out via em0
${FwCMD} add 4000       prob 0.5 skipto 4200                                                    in via em2
${FwCMD} add            setfib 1 log                                                            in via em2
${FwCMD} add            allow                                                                   in via em2
${FwCMD} add 4200       setfib 0 log                                                            in via em2
${FwCMD} add            allow                                                                   in via em2
${FwCMD} add 4500       allow                                                                   out via em2

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

00001 reass in
00002 deny { src-ip 127.0.0.0/8 or dst-ip 127.0.0.0/8 } not via lo0
00003 deny icmp from any to any frag
00004 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00005 deny dst-ip me ipoptions ssrr,lsrr,rr,ts
00006 reject tcp from any to any { tcpflags syn,fin,ack,psh,rst,urg or tcpflags !syn,!fin,!ack,!psh,!rst,!urg }
00007 reject tcp from any to any tcpflags fin not established
00008 deny icmp from any to 255.255.255.255 { via em0 or via em1 }
00100 skipto 1000 in via lo0
00101 skipto 1500 out via lo0
00102 skipto 2000 in via em0
00103 skipto 2500 out via em0
00104 skipto 3000 in via em1
00105 skipto 3500 out via em1
00106 skipto 4000 in via em2
00107 skipto 4500 out via em2
01000 allow in via lo0
01500 allow out via lo0
02000 nat 1 dst-ip 192.168.2.2 in via em0
02001 allow dst-ip 192.168.2.2 in via em0
02500 nat global src-ip 10.0.0.0/8 out via em0
02501 fwd 192.168.1.1 src-ip 192.168.1.2
02502 allow src-ip 192.168.2.2 out via em0
02503 nat 1 src-ip 10.0.0.0/8 out via em0
02504 allow src-ip 192.168.2.2 out via em0
03000 nat 2 dst-ip 192.168.1.2 in via em1
03001 allow dst-ip 192.168.1.2 in via em1
03500 nat global src-ip 10.0.0.0/8 out via em1
03501 fwd 192.168.2.1 src-ip 192.168.2.2
03502 allow src-ip 192.168.1.2 out via em1
03503 nat 2 src-ip 10.0.0.0/8 out via em1
03504 allow src-ip 192.168.1.2 out via em0
04000 prob 0.500000 skipto 4200 in via em2
04001 setfib 1 log logamount 100 in via em2
04002 allow in via em2
04200 setfib 0 log logamount 100 in via em2
04201 allow in via em2
04500 allow out via em2
65535 allow ip from any to any
вот только пока не знаю на сколько нат запоминает сессии

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение harmless » 2012-06-06 16:02:39

Всем привет!
Вот пробую сделать разпредиление трафика на два канала и ничего не получается!(
Кто как делал поделитесь, пожалуйста, ели это не является коммерческой тайной.)
Буду ждать ответов.

терминус_
проходил мимо

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение терминус_ » 2012-06-07 11:52:02

Вам что конкрено надо?
Балансировать между 2мя провайдерами трафик сети за рутером?
Или балансировать подключения к самому рутеру?

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение harmless » 2012-06-07 14:25:31

терминус_ писал(а):Вам что конкрено надо?
Балансировать между 2мя провайдерами трафик сети за рутером?
Или балансировать подключения к самому рутеру?
Спасибо за проявленный интерес!)
Я хочу сделать вот что:
1). Доступ к серверу по обоим каналам(возможно скоро их будет больше)
2). Балансировать трафик сети за роутером

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: ipfw, "2 провайдера" и входящие соединения

Непрочитанное сообщение harmless » 2012-06-14 14:25:34

Все таки мне удалось сделать доступ к серверу по обоим каналам одновременно:
#cat /etc/firewall.sh

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

#!/bin/sh

#############################################
#**** FireWall - конфигурационный файл *****#
#############################################
# бинарник ipfw
FwCMD="/sbin/ipfw -q "
# шаблон таблицы
FwTable="${FwCMD} table "
# Шаблон трубы
FwPipe="${FwCMD} pipe "

#*******************************************#
#**** ISP1 ****#
#*******************************************#
# Локальная сеть 
NetOut_ISP1="1.1.1.0/24"
# IP сервера в сети ISP1
IpOut_ISP="1.1.1.2"
# Интерфейс, смотрящий в сеть ISP1
LanOut_ISP1="vr0"

GW_ISP="1.1.1.2"

/usr/sbin/setfib -0 route add default ${GW_ISP1}

#*******************************************#

#*******************************************#
#**** Все что качается ISP2 ****#
#*******************************************#
# Локальная сеть ISP2
NetOut_ISP2="2.2.2.0/24"
# IP сервера в сети ISP2
IpOut_Magnus="2.2.2.2"
# Интерфейс, смотрящий в сеть ISP2
LanOut_ISP="re0"

GW_Magnus="2.2.2.1"

/usr/sbin/setfib -1 route add default ${GW_ISP2}

#############################################

#*******************************************#
#* Все что качается локальной сети *#
#*******************************************#
# Локальная сеть
NetIn="10.0.0.0/24"
# IP сервера в локальной сети
IpIn="10.0.0.1"
# Интерфейс, смотрящий в локальную сеть
LanIn="em0"

#############################################

#*******************************************#
#***************** СЕРВИСЫ *****************#
#*******************************************#

#* DNS,WEB,SMTP,SMTPS,POP3,POP3S,IMAP,IMAPS,FTP,FTP-passive,NTP *#

TCP="20,ftp,50000-60000,domain,smtp,smtps,pop3,pop3s,imap,imaps,http,https"
UDP="domain,ntp"

#############################################


#############################################
${FwCMD} disable one_pass
#############################################

################# CLEAN ALL #################

${FwCMD} -f flush
${FwCMD} -f pipe flush
${FwCMD} -f queue flush
${FwCMD} -f sched flush

${FwCMD} nat 4   config  if ${LanOut_ISP1} unreg_only same_ports reset log
${FwCMD} nat 5   config  if ${LanOut_ISP2} unreg_only same_ports reset log

#*******************************************#
${FwCMD} add reass in

# Общие правила защиты сервера
${FwCMD} add skipto 65534 icmp from any to any frag
${FwCMD} add skipto 65534 icmp from any to any in icmptypes 5,9,13,14,15,16,17
${FwCMD} add skipto 65534 dst-ip me ipoptions ssrr,lsrr,rr,ts
${FwCMD} add reject tcp from any to any { tcpflags syn,fin,ack,psh,rst,urg or tcpflags !syn,!fin,!ack,!psh,!rst,!urg }
${FwCMD} add reject tcp from any to any not established tcpflags fin

# LoopBack lo0
${FwCMD} add skipto 15000 in via lo0
${FwCMD} add skipto 20000 out via lo0

# ISP1 LanOut_ISP1
${FwCMD} add skipto 25000 in via ${LanOut_ISP1}
${FwCMD} add skipto 30000 out via ${LanOut_ISP1}

# ISP2 LanOut_ISP2
${FwCMD} add skipto 35000 in via ${LanOut_ISP2}
${FwCMD} add skipto 40000 out via ${LanOut_ISP2}

# Lan
${FwCMD} add skipto 45000 in via ${LanIn}
${FwCMD} add skipto 50000 out via ${LanIn}

# Deny statement for any other packets
${FwCMD} add skipto 65534 via any

#############################
# LoopBack lo0
# IN pass
${FwCMD} add 15000 count in via lo0
${FwCMD} add permit in via lo0

# Out pass
${FwCMD} add 20000 count out via lo0
${FwCMD} add permit out via lo0

# ISP1 LanOut_ISP1
# IN pass
${FwCMD} add 25000 count in via ${LanOut_ISP1}
${FwCMD} add skipto 65534 icmp from any to any dst-ip 255.255.255.255 in via ${LanOut_ISP1}
${FwCMD} add skipto 65534 not dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1}
${FwCMD} add skipto 65534 src-ip 127.0.0.0/8 in via ${LanOut_Bit}
${FwCMD} add nat 4 dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1}
${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1} established
${FwCMD} add set 5 permit tcp from any to any dst-ip ${IpOut_ISP1} dst-port ${TCP} in via ${LanOut_ISP1} setup keep-state
${FwCMD} add set 5 permit udp from any to any dst-ip ${IpOut_ISP1} dst-port ${UDP} in via ${LanOut_ISP1} keep-state
${FwCMD} add set 5 permit log tcp from any to any dst-ip ${IpOut_ISP1} dst-port 22 in via ${LanOut_ISP1} setup keep-state
${FwCMD} add permit dst-ip table\(100\) in via ${LanOut_ISP1}
${FwCMD} add permit icmp from any to any dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1} keep-state
${FwCMD} add skipto 65534 in via ${LanOut_ISP1}

# OUT pass
${FwCMD} add 30000 count out via ${LanOut_ISP1}
${FwCMD} add skipto 65534 icmp from any to any dst-ip 255.255.255.255 out via ${LanOut_ISP1}
${FwCMD} add skipto 65534 dst-ip 127.0.0.0/8 out via ${LanOut_ISP1}
${FwCMD} add nat global src-ip table\(100\) out via ${LanOut_ISP1}
${FwCMD} add skipto 34000 src-ip ${IpOut_ISP1} out via ${LanOut_ISP1}
${FwCMD} add fwd ${GW_ISP2} src-ip ${IpOut_ISP2}
${FwCMD} add nat 4 src-ip table\(100\) out via ${LanOut_ISP1}
${FwCMD} add 34000 permit src-ip ${IpOut_ISP1} out via ${LanOut_ISP1} keep-state
${FwCMD} add skipto 65534 out via ${LanOut_ISP1}

# ISP2 LanOut_ISP2
# IN pass
${FwCMD} add 35000 count in via ${LanOut_ISP2}
${FwCMD} add skipto 65534 not dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2}
${FwCMD} add skipto 65534 icmp from any to any dst-ip 255.255.255.255 in via ${LanOut_ISP2}
${FwCMD} add skipto 65534 src-ip 127.0.0.0/8 in via ${LanOut_ISP2}
${FwCMD} add nat 5 dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2}
${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2} established
${FwCMD} add set 5 permit tcp from any to any dst-ip ${IpOut_ISP2} dst-port ${TCP} in via ${LanOut_ISP2} setup keep-state
${FwCMD} add set 5 permit udp from any to any dst-ip ${IpOut_ISP2} dst-port ${UDP} in via ${LanOut_ISP2} keep-state
${FwCMD} add set 5 permit log tcp from any to any dst-ip ${IpOut_ISP2} dst-port 22 in via ${LanOut_ISP2} setup keep-state
${FwCMD} add permit dst-ip table\(100\) in via ${LanOut_ISP2}
${FwCMD} add permit icmp from any to any dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2} keep-state
${FwCMD} add skipto 65534 in via ${LanOut_ISP2}

# OUT pass
${FwCMD} add 40000 count out via ${LanOut_ISP2}
${FwCMD} add skipto 65534 icmp from any to any dst-ip 255.255.255.255 out via ${LanOut_ISP2}
${FwCMD} add skipto 65534 dst-ip 127.0.0.0/8 out via ${LanOut_ISP2}
${FwCMD} add nat global src-ip table\(100\) out via ${LanOut_ISP2}
${FwCMD} add skipto 44000 src-ip ${IpOut_ISP2} out via ${LanOut_ISP2}
${FwCMD} add fwd ${GW_ISP1} src-ip ${IpOut_ISP1}
${FwCMD} add nat 5 src-ip table\(100\) out via ${LanOut_ISP2}
${FwCMD} add 44000 permit src-ip ${IpOut_ISP2} out via ${LanOut_ISP2} keep-state
${FwCMD} add skipto 65534 out via ${LanOut_ISP2}

# Lan
# IN pass
${FwCMD} add 45000 count in via ${LanIn}
${FwCMD} add skipto 65534 src-ip 127.0.0.0/8 in via ${LanIn}
${FwCMD} add set 2 setfib 1 in via ${LanIn}
${FwCMD} add permit in via ${LanIn}

# OUT pass
${FwCMD} add 50000 count out via ${LanIn}
${FwCMD} add skipto 65534 dst-ip 127.0.0.0/8 out via ${LanIn}
${FwCMD} add permit out via ${LanIn}

${FwCMD} add 65534 deny via any
Но распредиление трафика по двум каналам еще не вышло :bn: