The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"freebsd 2 провайдера и одна локальная сеть"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Firewall, Фильтрация пакетов / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"freebsd 2 провайдера и одна локальная сеть"  +/
Сообщение от veres email(ok) on 29-Мрт-13, 12:52 
Добавлено: Пт 29 Мар, 2013 12:58 pm    Заголовок сообщения: freebsd 2 провайдера и одна локальная сеть      
В офисе 2 провайдера. Есть сервер на FreeBSD 8.2
3 сет. карты - 2 для пров. и 1 на локалку. От провайдеров статические ip

Запущены bind, mail server, mpd, httpd и т.д.

Нужно чтоб до сервера извне по ssh можно было достучаться по двум внешним ip , и чтоб сервисы тоже были доступны с 2 адресов
В офисе пользователи получали инет от 1 провайдера, но в случае отключения 1, сменой шлюза по умолчанию можно было переключить всех на 2 провайдера

Нашел на Хабре статью http://habrahabr.ru/post/124447/ и сделал все так же как и там

# /etc/ipfw.script

ipfw="/sbin/ipfw -q " 

local="re0"
ISP1="rl0"
ISP2="rl1"

localnet="192.168.0.0/24"

ISP1_ip="123.45.67.89"
ISP2_ip="234.56.78.9"

ISP1_gw="123.45.67.1"
ISP2_gw="234.56.78.1"

nat_ISP1="8668"
nat_ISP2="8669"
nat_global="8670"

${ipfw} -f flush

${ipfw} add 10 check-state
${ipfw} add 11 allow ip from any to any via lo0
${ipfw} add 12 deny ip from any to 127.0.0.0/8
${ipfw} add 13 deny ip from 127.0.0.0/8 to any

#Пример сервисов которые необходимо вывесить на оба внешних интерфейса.

# sshd
${ipfw} add 20 allow tcp from any to me 14441

# Web Server
${ipfw} add 25 allow tcp from any to me 80

# MailServer
${ipfw} add 26 allow tcp from any to me 25
${ipfw} add 27 allow tcp from any to me 110

# Other

${ipfw} add 28 allow tcp from any to me 1723 setup
${ipfw} add 29 allow tcp from any to any via ng*
${ipfw} add 30 allow udp from any to any via ng*
${ipfw} add 31 allow tcp from any to me 53
${ipfw} add 32 allow udp from any to me 53
${ipfw} add 33 allow tcp from any to me dst-port 21,30000-50000 setup


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

${ipfw} add 100 fwd ${ISP1_gw} ip from ${ISP1_ip} to not ${localnet}
${ipfw} add 200 fwd ${ISP2_gw} ip from ${ISP2_ip} to not ${localnet}

# Далее разделяем весь трафик по интерфейсам и направлениям, для удобства

# Локальный интерфейс
${ipfw} add 400 skipto 1000 all from any to any in recv ${local}
${ipfw} add 410 skipto 2000 all from any to any out xmit ${local}

# Внешние интерфейсы
${ipfw} add 500 skipto 3000 all from any to any in recv ${ISP1}
${ipfw} add 550 skipto 4000 all from any to any out xmit ${ISP1}
${ipfw} add 600 skipto 5000 all from any to any in recv ${ISP2}
${ipfw} add 650 skipto 6000 all from any to any out xmit ${ISP2}

# Если вдруг объявятся еще интерфейсы то рубим их. Все интерфейсы мы должны разрулить сами, иначе все пакеты с этих новых интерфейсов попадут под следующее разрешающее правило
${ipfw} add 900 deny all from any to any


# Локальный входящий
${ipfw} add 1000 allow all from any to any

# Локальный исходящий
${ipfw} add 2000 allow all from any to any

# ISP1 входящий (входящий трафик заворачиваем в нужный порт natd)
${ipfw} add 3000 divert ${nat_ISP1} ip from any to ${ISP1_ip}
${ipfw} add 3010 allow all from any to any

# ISP1 исходящий (аналогично для обоих провайдеров)
# Заворачиваем пакет в natd  по порту globalport
${ipfw} add 4000 divert ${nat_global} ip from ${localnet} to any
# Если есть запись трянсляции подключения снаружи вовнутрь, то natd  модифицирует пакет и ставит адресом источника тот внешний адрес, на который производилось подключение
# Если это адрес первого провайдера, то далее просто разрешаем пакет и на этом обработка заканчивается
${ipfw} add 4010 allow all from ${ISP1_ip} to any
# Если это адрес второго провайдера, то мы форвардим пакет на шлюз второго провайдера.
${ipfw} add 4020 fwd ${ISP2_gw} ip from ${ISP2_ip} to any
# Если же natd вернул неизмененный пакет, значит данный пакет не относится к подключению извне, тогда заворачиваем его в соответствующий порт natd
${ipfw} add 4030 divert ${nat_ISP1} ip from ${localnet} to any
# Разрешаем прохождение пакета.
${ipfw} add 4040 allow all from any to any

# Для второго провайдера все аналогично

# ISP2 входящий
${ipfw} add 5000 divert ${nat_ISP2} ip from any to ${ISP2_ip}
${ipfw} add 5010 allow all from any to any

# ISP2 исходящий
${ipfw} add 6000 divert ${nat_global} ip from ${localnet} to any
${ipfw} add 6010 allow all from ${ISP2_ip} to any
${ipfw} add 6020 fwd ${ISP1_gw} ip from ${ISP1_ip} to any
${ipfw} add 6030 divert ${nat_ISP2} ip from ${localnet} to any
${ipfw} add 6040 allow all from any to any

При таком конфиге все вроде работает, но Postfix не может отправить почту на внешние адреса (внутренняя ходит) - почему?

И еще обратил внимание на правила 1000 и 2000 - они одинаковые, это так и должно быть?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "freebsd 2 провайдера и одна локальная сеть"  +/
Сообщение от veres (ok) on 29-Мрт-13, 23:29 
Немного перефразирую вопрос

Имеем в офисе шлюз на FreeBSD 8.2
Три сетевых интерфейса
re0 - локалка (192.168.0.0/24)
rl0 - 1 провайдер
rl1 - 2 провайдер

IP 1 провайдера 111.111.111.22
GW 1 провайдера 111.111.111.1

IP 2 провайдера 222.222.222.33
GW 2 провайдера 222.222.222.1

В файле /etc/rc.cong
defaultrouter=" 111.111.111.1"

Нужно чтоб сервисы на маршрутизаторе были доступными по обоим внешним адресам одновременно

Сделано средствами IPFW и natd

Содержимое файла /etc/natd.conf

log 
instance default
interface rl0
port 8668
use_sockets yes
same_ports yes
redirect_port tcp 192.168.0.105:4899 9800

instance rl1
interface rl1
port 8669
use_sockets yes
same_ports yes

globalport 8670

Содержимое файла /etc/ipfw (правила фаервола)

add 1000 allow tcp from any to me 14441 
add 2000 allow tcp from any to me 80
add 3000 allow tcp from any to me 25
add 4000 allow tcp from any to me 110
add 5000 allow tcp from any to me 1723 setup
add 6000 allow tcp from any to any via ng*
add 7000 allow udp from any to any via ng*
add 8000 allow tcp from any to me 53
add 9000 allow udp from any to me 53
add 10000 allow tcp from any to me dst-port 21,30000-50000 setup

add 11000 fwd 111.111.111.1 ip from 111.111.111.22 to not 192.168.0.0/24
add 12000 fwd 222.222.222.1 ip from 222.222.222.33 to not 192.168.0.0/24

add 13000 skipto 20000 all from any to any in recv re0
add 14000 skipto 21000 all from any to any out xmit re0

add 15000 skipto 22000 all from any to any in recv rl0
add 16000 skipto 24000 all from any to any out xmit rl0
add 17000 skipto 29000 all from any to any in recv rl1
add 18000 skipto 31000 all from any to any out xmit rl1

add 19000 deny all from any to any

add 20000 allow all from any to any

add 21000 allow all from any to any

add 22000 divert 8668 ip from any to 111.111.111.22
add 23000 allow all from any to any

add 24000 divert 8670 ip from 192.168.0.0/24 to any

add 25000 allow all from 111.111.111.22 to any

add 26000 fwd 222.222.222.1 ip from 222.222.222.33 to any

add 27000 divert 8668 ip from 192.168.0.0/24 to any

add 28000 allow all from any to any

add 29000 divert 8669 ip from any to 222.222.222.33
add 30000 allow all from any to any

add 31000 divert 8670 ip from 192.168.0.0/24 to any
add 32000 allow all from 222.222.222.33 to any
add 33000 fwd 111.111.111.1 ip from 111.111.111.22 to any
add 34000 divert 8669 ip from 192.168.0.0/24 to any
add 35000 allow all from any to any

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

Но, если в rc.conf дефолтроут - шлюз первого провайдера, команда telnet mx.yandex.ru 25 проходит нормально, но если сменить на шлюз второго провайдера (чтоб перевести локалку на использование инета от второго провайдера) telnet по 25 порту не проходит ни на один сервер.

Помогите, что не так?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "freebsd 2 провайдера и одна локальная сеть"  +/
Сообщение от Aquarius (ok) on 01-Апр-13, 13:09 
>[оверквотинг удален]
> add 34000 divert 8669 ip from 192.168.0.0/24 to any
> add 35000 allow all from any to any
> Все правила написаны одинаково для двух провайдеров, поэтому смена канала осуществляется
> просто заменой основного шлюза на роутере. Правила модифицировать нет необходимости.
> Но, если в rc.conf дефолтроут - шлюз первого провайдера, команда telnet mx.yandex.ru
> 25 проходит нормально, но если сменить на шлюз второго провайдера (чтоб
> перевести локалку на использование инета от второго провайдера) telnet по 25
> порту не проходит ни на один сервер.
>

> Помогите, что не так?

сверьте список правил с выводом ipfw show

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "freebsd 2 провайдера и одна локальная сеть"  +/
Сообщение от szhura (ok) on 26-Апр-13, 13:24 
чтобы не плодить темы спрошу тут.

есть сервер freebsd 7.3 с тремя сетями - два прова и локалка.
локалка - rl1 (192.168.0.0/24)
провы - rl0 (95.128.224.187), alc0 (192.168.1.2)

BSDsrv# vi /etc/natd.conf
log yes
#instance default
use_sockets yes
same_ports yes
unregistered_only yes
interface rl0
port 8668
dynamic yes

instance yota
use_sockets yes
same_ports yes
interface alc0
port 8669
dynamic yes

BSDsrv# vi /etc/myfw.ipfw
<...>
ipfw add 520 divert 8669 log all from ${localnet} to any out via alc0
ipfw add 530 fwd 192.168.1.1 all from 192.168.1.2 to any
ipfw add 610 divert 8669 log all from any to 192.168.1.2 in via alc0
ipfw add 721 allow log tcp from me to any out via alc0
ipfw add 729 allow tcp from any to me dst-port 20,21,80,443,1024-65535 in via alc0
ipfw add 731 deny log tcp from any to me in via alc0
ipfw add 741 allow log tcp from any to ${localnet} in via alc0
<...>

BSDsrv# vi /var/log/security
<...>
BSDsrv kernel: ipfw: 520 Divert 8669 TCP 192.168.0.169:4517 192.168.1.1:80 out via alc0
BSDsrv kernel: ipfw: 721 Accept TCP 95.128.224.187:4517 192.168.1.1:80 out via alc0
BSDsrv kernel: ipfw: 520 Divert 8669 TCP 192.168.0.169:4518 192.168.1.1:80 out via alc0
BSDsrv kernel: ipfw: 721 Accept TCP 95.128.224.187:4518 192.168.1.1:80 out via alc0
<...>

объясните мне - какого хрена divert 8669 подставляет IP от rl1???

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "freebsd 2 провайдера и одна локальная сеть"  +/
Сообщение от szhura (ok) on 26-Апр-13, 13:37 
блин все, вопрос решен - нужно было убрать из rc.conf строку

#natd_interface="rl0"           # Public interface or IPaddress to use.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру