FreeBSD 8.0 + PF + два провайдера (static и VPN)

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-10 13:11:58

Здравствуйте!

Задался целью еще пару лет назад объединить двух провайдеров на одном сервере. Пользовался и статьями на сайте и темами на форуме, но за это время так и не было найдено рабочее решение.

Имеется:
Corbina: (vpn)

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

Локальный интерфейс: [b]re0[/b]
IP-адрес: 10.52.125.171
Шлюз: 10.52.120.1
Внешний интерфейс: [b]ng0[/b]
IP-адрес: 78.108.253.98
Шлюз: 85.21.0.x
RiNet: (static)

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

Интерфейс: [b]em0[/b]
IP-адрес: 86.63.107.67
Шлюз: 86.63.107.65
Задача: сделать по умолчанию доступ наружу и из-вне через RiNet, но с возможностью выбора, какую машину через какого провайдера выпускать наружу. Corbina со своим безлимитом нужна только для rtorrent, но доступ по ssh, тем не менее, нужен.

В pf.conf, к сожалению, не сохранились эти гениальные строчки. Результат всегда был один: как только поднимался vpn-интерфейс, пакеты приходящие через RiNet пытались выйти через Корбину.
В rc.conf defaultrouter=86.63.107.65. Когда поднимается vpn, mpd5 запускает скрипт:

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

#!/bin/sh
LocalGW=`10.52.120.1`

route delete $4
route add $4 $LocalGW
route delete default
route add default $4

echo $4 > /tmp/l2tp_GW
Для себя пока вижу три новых варианта:
0. Использовать два разных шлюза на фряхе (сейчас так).
1. Решить поставленную задачу на одной машине стандартными средствами.
2. Использовать jail, если это возможно (linux с openvz не предлагать).
3. Использовать для Корбины отдельный роутер и подключить его к серверу, но это позор, т.к. никакой роутер не сравнится с фряхой по скорости обработки пакетов.

Буду рад помощи :crazy:
I'll be back...

Хостинговая компания 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/

Гость
проходил мимо

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Гость » 2010-08-11 15:50:28

После того как все интерфейсы и маршруты подняты можно попробовать сделать

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

route change default ip_шлюза_в_ринет
, после чего форвардить пакеты файерволлом (как это сделать с pf - смотреть в pf tutorial).

Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-11 17:08:06

А как же в PF использовать corbina_gw, когда этот gw всегда динамический?
I'll be back...

Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-11 17:40:07

Добавил в pf.conf:

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

pass in quick on $rinet_extif reply-to ($rinet_extif $rinet_gw/32) inet from any to $virus_netint
pass out quick on $rinet_extif route-to ($rinet_extif $rinet_gw/32) inet from $virus_netint to any

pass in quick on $corbina_extif reply-to ($corbina_extif $corbina_gw/32) inet from any to $virus_netint
pass out quick on $corbina_extif route-to ($corbina_extif $corbina_gw/32) inet from $virus_netint to any
При пинге из-вне pftop выдает такую строку:

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

icmp      In  212.48.143.225:0                              78.107.253.98:52049                                     0:0            00:00:30  00:00:09       60     5040
Ответа нет.

При

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

ping -S 78.108.253.98 ya.ru
ответа тоже не видать.

netstat -rn

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

default            86.63.107.65       UGS        38    18085    em0
10.0.0.0/8         10.52.120.1        UGS         0        3    xl0
10.52.120.0/21     link#3             U           0        3    xl0
10.52.125.171      link#3             UHS         0        0    lo0
85.21.0.0/24       10.52.120.1        UGS         2      572    xl0
86.63.107.67       link#1             UHS         0       15    lo0
Добавлял в таблицу маршрутов 78.108.253.98 -> 85.21.0.241 - все без изменений.
I'll be back...

Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-11 21:57:41

io-up.sh привел к следующему виду, чтобы не заменялся defaultrouter:

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

#!/bin/sh

LocalGW=`10.53.120.1`

route delete $4
route add $4 $LocalGW
#route delete default
#route add default $4

echo $4 > /tmp/l2tp_GW
Аналогично и io-down.sh:

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

#!/bin/sh

LocalGW=`10.53.120.1`
vpn_GW=`cat /tmp/l2tp_GW`

route delete $dr
#route delete default
#route add default $LocalGW
I'll be back...

Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-11 22:18:14

Если вручную прописать маршрут до определенного хоста через шлюз корбины, то все работает. А вот автоматически никак.
I'll be back...

Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-13 6:37:13

Выделил основные моменты конфига.

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

#RiNet
rinet_extaddr="86.63.107.67"
rinet_gw="86.63.107.65"

#Corbina
corbina_extaddr="78.108.253.98"
corbina_gw="85.21.0.241"

corbina_clients="172.16.0.200"

nat on $rinet_extif from $virus_netint to any -> 86.63.107.67
nat on $corbina_extif from $virus_netint to any -> ($corbina_extif)

#Incoming
#pass in quick on $rinet_extif reply-to ($rinet_extif $rinet_gw/32) inet from any to any //закомментировал, т.к. ринет по дефолту принимает пакеты
pass in quick on $corbina_extif reply-to ($corbina_extif $corbina_gw/32) inet from any to (self:network)

#Outgoing
#pass in quick on $virus_netif route-to ($rinet_extif $rinet_gw) inet from any to any keep state //...и выпускает
pass in quick on $virus_netif route-to ($corbina_extif $corbina_gw) inet from $corbina_clients to any keep state

pass in quick all
pass out quick all
Удалось добиться следующего:
1. Соединения из-вне через оба провайдера редиректятся как надо (рассматриваю корбину, т.к. она не дефолтовая).
2. Соединения наружу работают как-то странно - если после ринета переключиться на корбину, все работает, но если очистить dns-кеш на компе в сети, то адреса перестают резолвиться и сервер не пингуется локально с этой машины.
3. Появился странный глюк: ntpd и dhcpd в какой-то момент начинают отжирать почти все процессорное время, при этом при пинге из-вне ринет показывает обычные 3 мс, а корбина >600 мс. Если службы остановить, то все становится нормальным.
4. При таком раскладе на других машинах ринет может хаотично пропадать и появляться. Возможно, где-то маршрутизация дурит.
I'll be back...

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение vadim64 » 2010-08-13 16:27:27

Бля! Ещё один блог "Юного любителя БСД" :evil:
Вам чё всяких жежешечек и блогспотов мало!?
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-13 16:50:13

Тему можно закрывать.
Понятно отношение местного сообщества.
I'll be back...

Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-14 21:05:32

Все же осталась одна проблема.
Используя такую комбинацию:

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

#Incoming
pass in quick on $rinet_extif reply-to ($rinet_extif $rinet_gw/32) from any to (self:network)
pass in quick on $corbina_extif reply-to ($corbina_extif $corbina_gw/32) from any to (self:network)

#Outgoing
pass in quick on $virus_netif route-to ($rinet_extif $rinet_gw/32) inet from <rinet> to any keep state
pass in quick on $virus_netif route-to ($corbina_extif $corbina_gw/32) inet from <corbina> to any keep state
и при попытке пинга шлюза из локальной сети, он недоступен. Трасса начинается сразу со шлюза провайдера:

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

C:\Users\Dr.Virus>tracert -w 10 local

Трассировка маршрута к local [172.16.0.8]
с максимальным числом прыжков 30:

  1     8 ms     2 ms     1 ms  h86-63-107-65.ln.rinet.ru [86.63.107.65]
  2     1 ms     5 ms     1 ms  gwh8-v20.rinet.ru [86.63.124.108]
...
Как починить?
I'll be back...

Dr.Virus
рядовой
Сообщения: 11
Зарегистрирован: 2009-03-21 23:54:55

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение Dr.Virus » 2010-08-15 21:33:15

Решено.

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

#Outgoing
pass in quick on $virus_netif route-to ($rinet_extif $rinet_gw/32) inet from <rinet> to !(self:network) keep state
pass in quick on $virus_netif route-to ($corbina_extif $corbina_gw/32) inet from <corbina> to !(self:network) keep state
I'll be back...

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: FreeBSD 8.0 + PF + два провайдера (static и VPN)

Непрочитанное сообщение vadim64 » 2010-08-17 9:01:13

неотразимо))))
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.