Два ISP Одна LAN ipfw+natd

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mvd
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-11 16:19:09

Два ISP Одна LAN ipfw+natd

Непрочитанное сообщение mvd » 2010-06-09 19:26:12

Цель розрулить UA-IX and World.
uname -a FreeBSD mvdmain 7.3-STABLE FreeBSD 7.3-STABLE #1: Tue Jun 8 21:00:29 EEST 2010 root@mvdmain:/usr/obj/usr/src/sys/MVDMAIN i386

rc.conf

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

gateway_enable="YES"
ifconfig_rl0="inet 192.168.10.1  netmask 255.255.255.0"
ifconfig_rl0_alias0="inet 192.168.0.1  netmask 255.255.255.0"
# ISP1
ifconfig_rl2="inet XXX.XXX.85.105 netmask 255.255.255.0 -rxcsum"
# ISP2
ifconfig_rl1="inet XXX.XXX.252.120 netmask 255.255.255.0 -arp"
#ifconfig_rl1="dhcp"
hostname="mvdmain"

# ISP1
defaultrouter="XXX.XXX.85.97"
# ISP2
#defaultrouter="XXX.XXX.252.1"

setfib1_enable="YES"
setfib1_defaultroute="XXX.XXX.252.1"

#firewall_enable="YES"
#firewall_type="/etc/rc.fwmvd"
#firewall_flags=" add allow all from any to any"

#natd_enable="YES"
#natd_interface="rl2"
#natd_flags="-m -u"

pf_enable="NO"
#firewall_script="/etc/rc.firewall"
#ipsec_enable="YES"
#ipsec_file="/etc/ipsec.conf"

#ipnat_enable="NO"
#ipnat_rules="/etc/ipnat.conf"

sendmail_enable="NONE"
clamav_freshclam_enable="YES"
clamav_clamd_enable="YES"

racoon_enable="NO"
font8x8="cp866-8x8"
font8x14="cp866-8x14"
font8x16="cp866-8x16"

moused_enable="YES"
sshd_enable=YES
exim_enable="YES"
named_enable="YES"
inetd_enable="YES"
ntpdate_enable="YES"

smbd_enable="YES"
nmbd_enable="YES"

mpd_enable="YES"
#squid_enable="YES"
apache_enable="YES"

fsck_y_enable="YES"
background_fsck="YES"
rc.local

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

/etc/natd.sh
natd.sh

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

#\!/bin/sh
/sbin/natd -p 8664/divert -f /etc/natd_rl1.conf -n rl1
/sbin/natd -p 8665/divert -f /etc/natd_rl2.conf -n rl2

/sbin/ipfw -q -f flush
cmd="/sbin/ipfw -q "


${cmd} add 10 divert 8664 all from 192.168.0.0/24 to any via rl1
${cmd} add 20 divert 8664 all from any to XXX.XXX.252.120 in recv rl1

${cmd} add 200 divert 8665 all from 192.168.10.0/24 to any via rl2
${cmd} add 201 divert 8665 all from any to XXX.XXX.85.105 in recv rl2

////////////////////////////////////////////////////////////////////////////A2 Взято с примера forum.lissyara.su (Честное разделение трафика между двумя ISP)
#${cmd} add 1010 prob 0.5 skipto 1060 ip from any to any in recv rl0
#${cmd} add 1040 setfib 0 ip from any to any via rl0 keep-state
#${cmd} add 1050 allow ip from any to any via rl0

#${cmd} add 1060 setfib 1 ip from any to any via rl0 keep-state
#${cmd} add 1070 allow ip from any to any via rl0

//A1////////////////////////////////////////////////////////////////////////// Этот кусок вообще блокирует выход в Инет
#${cmd} add 1080 deny ip from any to 192.168.0.0/16 in recv rl2
#${cmd} add 1090 deny ip from 192.168.0.0/16 to any in recv rl2 //#A1////////// По сюда :)
#${cmd} add 10100 deny ip from any to 172.16.0.0/12 in recv rl2
#${cmd} add 10110 deny ip from 172.16.0.0/12 to any in recv rl2
#${cmd} add 10120 deny ip from any to 10.0.0.0/8 in recv rl2
#${cmd} add 10130 deny ip from 10.0.0.0/8 to any in recv rl2
#${cmd} add 10140 deny ip from any to 169.254.0.0/16 in recv rl2
#${cmd} add 10150 deny ip from 169.254.0.0/16 to any in recv rl2
#${cmd} add 1081 deny ip from any to 192.168.0.0/16 in recv rl1
#${cmd} add 1091 deny ip from 192.168.0.0/16 to any in recv rl1
#${cmd} add 10101 deny ip from any to 172.16.0.0/12 in recv rl1
#${cmd} add 10111 deny ip from 172.16.0.0/12 to any in recv rl1
#${cmd} add 10121 deny ip from any to 10.0.0.0/8 in recv rl1
#${cmd} add 10131 deny ip from 10.0.0.0/8 to any in recv rl1
#${cmd} add 10141 deny ip from any to 169.254.0.0/16 in recv rl1
#${cmd} add 10151 deny ip from 169.254.0.0/16 to any in recv rl1

//A2//////////////////////////////////////////////////////////////////////////////////// Взято с примера forum.lissyara.su (Честное разделение трафика между двумя ISP) ну толком не работает - НЕ РОУТИТ (Может и руки) Но SKype роуты все равно находит :)

#${cmd} pipe 1 config bw 100Mbit/s queue 60 gred 0.002/10/30/0.1
#${cmd} queue 1 config pipe 1 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

#${cmd} pipe 2 config bw 100Mbit/s queue 60 gred 0.002/10/30/0.1
#${cmd} queue 2 config pipe 2 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

#${cmd} pipe 3 config bw 100Mbit/s queue 60 gred 0.002/10/30/0.1
#${cmd} queue 3 config pipe 3 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

#${cmd} pipe 4 config bw 100Mbit/s queue 60 gred 0.002/10/30/0.1
#${cmd} queue 4 config pipe 4 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1


#${cmd} nat 1 config log if rl2 same_ports reset deny_in redirect_port tcp 192.168.10.22:XXXX XXXX redirect_port tcp 192.168.10.22:XXXX XXXX redirect_port tcp 192.168.10.105:XXXX XXXX
#${cmd} nat 2 config log if rl1 same_ports reset deny_in

#${cmd} add 10160 queue 1 ip from any to any out xmit rl2
#${cmd} add 10170 nat 1 ip from any to any via rl2
#${cmd} add 10180 queue 2 ip from any to any in recv rl2

#${cmd} add 10190 queue 3 ip from any to any out xmit rl1
#${cmd} add 10200 nat 2 ip from any to any via rl1
#${cmd} add 10210 queue 4 ip from any to any in recv rl1

#${cmd} add 10220 allow all from any to any
#${cmd} add 65534 deny all from any to any //////////////////////////////////////////// #A2

echo "nameserver XXX.XXX.XXX.XXX">/etc/resolv.conf ///ISP1
echo "nameserver XXX.XXX.XXX.XXX">>/etc/resolv.conf ///ISP1
echo "nameserver XXX.XXX.XXX.XXX">>/etc/resolv.conf ///ISP2
KERNEL

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

options         IPDIVERT
#options        BRIDGE
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_FORWARD
options         IPFIREWALL_NAT
options         DUMMYNET
options         LIBALIAS
options         ROUTETABLES=2
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFILTER
options         IPFILTER_LOG
options         ALTQ
До тейблов рано покамисть ... Хотябы подсеть пустить через другого Прова !!! :smile:
С подсети 192.168.10.0/24 все прекрастно ходит через rl2 туда и обратно
А как добиться чтобы машинки ездили из под сети 192.168.0.0/24 на rl1 и возвращались оттудаго обратно не допру! :evil:

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

Аватара пользователя
EARL
мл. сержант
Сообщения: 85
Зарегистрирован: 2010-05-24 9:05:18
Откуда: Тамбов

Re: Два ISP Одна LAN ipfw+natd

Непрочитанное сообщение EARL » 2010-06-10 8:20:00

У вас defaultrouter указывает на шлюз первого ISP1, поэтому туда всё и уходит. Если нужно зарулить сетку 192.168.0.0/24 через ISP2, я бы посоветовал посмотреть в сторону fwd для ipfw.

mvd
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-11 16:19:09

Re: Два ISP Одна LAN ipfw+natd

Непрочитанное сообщение mvd » 2010-06-17 11:48:33

Покамисть сделал только так... Кто может посоветовать как сделать разделение UA-IX в rl2 World в rl1 (безболезненно) :smile:

natd.conf

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

log
instance default
interface rl2
port 8668

instance Second_ISP
interface rl1
port 8669

globalport 8670
ipfw.script

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

/sbin/ipfw -q -f flush
fwcmd="/sbin/ipfw -q "

${fwcmd} 10 add divert 8668 ip from 192.168.10.0/24 to any
${fwcmd} 20 add divert 8669 ip from 192.168.0.0/24 to any
${fwcmd} 30 add fwd [GW(rl2)] ip from [IP(rl2)] to any
${fwcmd} 40 add fwd [GW(rl1)] ip from [IP(rl1)] to any
${fwcmd} 50 add divert 8668 ip from any to [IP(rl2)]
${fwcmd} 60 add divert 8669 ip from any to [IP(rl1)]
${fwcmd} add 6040 allow all from any to any
Все работает :) - но это далеко не разделение трафика, так как
1.для Worlda ставим свою подсеть в 192.168.0.ХХХ ура ходим через GW1(rl1).
2.для UA-IX ставим свою подсеть в 192.168.10.ХХХ ура ходим через GW2(rl2).
Можно с такими началом идти дальше?
Куда копать для того чтобы пускать UA-IX в GW1 World в GW2. Не меняя подсети?

Спасибо! :drinks:

Аватара пользователя
EARL
мл. сержант
Сообщения: 85
Зарегистрирован: 2010-05-24 9:05:18
Откуда: Тамбов

Re: Два ISP Одна LAN ipfw+natd

Непрочитанное сообщение EARL » 2010-06-17 19:25:53

mvd писал(а):Куда копать для того чтобы пускать UA-IX в GW1 World в GW2. Не меняя подсети?
Всё зависит от критерия по которому должен выбираться шлюз. Обрисуйте на примере что вы хотите реализовать.

mvd
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-11 16:19:09

Re: Два ISP Одна LAN ipfw+natd

Непрочитанное сообщение mvd » 2011-02-16 21:39:20

!!!Буду рисовать!!! - спустя сколько времени!!!

mvd
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-11 16:19:09

Re: Два ISP Одна LAN ipfw+natd

Непрочитанное сообщение mvd » 2011-02-16 23:03:25

mvd писал(а):!!!Буду рисовать!!! - спустя сколько времени!!!
Изображение
Сервак через путтю.
192.168.10.1 - ping = 0% lose
192.168.0.1 - ping = ЗАСТРЯЕТ НАМЕРТВО - Я в затруднении в чем может быть причина !!!
Сервак Имена тоже не резолвит!!!

А теперь по порядку (для догадок и помощи).
rc.conf

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

gateway_enable="YES"
ifconfig_stge0="inet 192.168.0.1  netmask 255.255.255.0"
ifconfig_stge0_alias0="inet 192.168.10.1  netmask 255.255.255.0"
# FIRST-ISP
ifconfig_stge1="inet 1.1.193.102 netmask 255.255.255.252 -rxcsum"
# SECOND-ISP
ifconfig_rl0="inet 2.2.204.2 netmask 255.255.255.0 -rxcsum"
hostname="mvdmain"

defaultrouter="2.2.193.101"

#setfib1_enable="YES"
#setfib1_defaultroute="1.1.193.101"
#setfib2_enable="YES"
#setfib2_defaultroute="2.2.204.1"

dhcpd_enable="YES"
dhcpd_iface="stge0"

firewall_enable="YES"
firewall_script="/etc/firewall-nat"

pf_enable="NO"

#ipnat_enable="NO"
#ipnat_rules="/etc/ipnat.conf"

sendmail_enable="NONE"
clamav_freshclam_enable="YES"
clamav_clamd_enable="YES"
racoon_enable="NO"

sshd_enable=YES
exim_enable="YES"
named_enable="YES"

inetd_enable="YES"
ntpdate_enable="YES"

smbd_enable="YES"
nmbd_enable="YES"
mpd_enable="YES"
#squid_enable="YES"
apache_enable="YES"

fsck_y_enable="YES"
background_fsck="YES"

font8x8="cp866-8x8"
font8x14="cp866-8x14"
font8x16="cp866-8x16"
moused_enable="YES"
rc.local

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

/etc/natd.sh
/usr/local/etc/rc.d/mpd5 start
/usr/local/sbin/dhcpd -cf /usr/local/etc/dhcpd.conf stge0
natd.sh

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

#\!/bin/sh
/sbin/natd -f /etc/natd.conf
echo "nameserver 1.1.4.1">/etc/resolv.conf
echo "nameserver 1.1.4.11">>/etc/resolv.conf
echo "nameserver 2.2.2.30">>/etc/resolv.conf
natd.conf

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

#log
instance First_ISP
interface stge1
port 8668
redirect_port tcp 192.168.10.XX:3307 3307
redirect_port tcp 192.168.10.XX:4899 4899
redirect_port tcp 192.168.10.XX:4777 4777
redirect_port tcp 192.168.10.XX:4578 4578
redirect_port tcp 192.168.10.XX:4577 4577
redirect_port udp 192.168.10.XX:5060-5070 5060-5070
redirect_port tcp 192.168.10.XX:5060-5070 5060-5070
redirect_port udp 192.168.10.XX:10000-65535 10000-65535
redirect_port tcp 192.168.10.XX:10000-65535 10000-65535

instance Second_ISP
interface rl0
port 8669
redirect_port tcp 192.168.0.XX:4777 4779
redirect_port tcp 192.168.0.XX:6000 6000
redirect_port udp 192.168.0.XX:6000 6000

globalport 8670
firewall-nat.sh

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

/sbin/ipfw -q -f flush
fwcmd="/sbin/ipfw -q "

${fwcmd} 100 add allow all from any to any via stge0
${fwcmd} 110 add divert 8668 ip from 192.168.10.0/24 to any
${fwcmd} 120 add fwd 1.1.193.101 ip from 1.1.193.102 to any
${fwcmd} 130 add divert 8668 ip from any to 1.1.193.102

${fwcmd} 140 add divert 8669 ip from 192.168.0.0/24 to any
${fwcmd} 150 add fwd 2.2.204.1 ip from 2.2.204.2 to any
${fwcmd} 160 add divert 8669 ip from any to 2.2.204.2

${fwcmd} 170 add allow gre from any to any
${fwcmd} 180 add allow all from any to any via ng*
${fwcmd} add 6040 allow log all from any to any
hosts

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

::1                     localhost.my.domain localhost
127.0.0.1               localhost.my.domain localhost

192.168.0.1             smvdmain.domain smvdmain
192.168.10.1            fmvdmain.domain fmvdmain
1.1.193.102         		first.isp first.inet
2.2.204.2            		second.isp second.inet
ВАРИАНТ РАБОТАЕТ - разные подсети ходят в нет по (разному) своему divert-y, Только сервер при этом криво работает
Даже при коннекте к SSH вводиш Логин и - ЖДЕШЬ МИНУТУ для ввода пароля. (Сервер сам для себя не ДНС-ит не пускает 53-ий для себя, хотя клиенты летают как х..0.0 так и х..10.0)... ШО РОБЫТЬ? :crazy:

mvd
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-11 16:19:09

Re: Два ISP Одна LAN ipfw+natd

Непрочитанное сообщение mvd » 2011-02-17 11:39:55

Вот картинка чего я хочу. Какбы работает но при этом всем сервер неадэкватно работает.
Вложения
trident.png
Картинка

mvd
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-11 16:19:09

Re: Два ISP Одна LAN ipfw+natd

Непрочитанное сообщение mvd » 2011-03-04 17:44:09

Решил проблему жестких зависаний - жаль что никто носом не ткнул. Сейчас Сервер стал нормально шуршать!!!
Как решал.
Пошол я в сторону анализа пакетов tcpdump-om.
есть три карточки -
stge0 - локальный (192.168.0.1 и 192.168.10.1)
stge1 - интернет (1.1.193.102)
rl0 - интернет (2.2.204.2)
пустил ping http://www.ru на самом сервере, а дальше анализировал его зная его IP 194.87.0.50!


[mvd@mvdmain mvd ]# tcpdump -n -i stge1 | grep http://www.ru
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on stge1, link-type EN10MB (Ethernet), capture size 96 bytes
15:27:23.655176 IP 1.1.193.102.23430 > 1.1.84.1.53: 40613+ A? http://www.ru. (24)


Одновременно слушал с другого окна


[mvd@aldanmain mvd ]# tcpdump -n -i stge1 | grep 194.87.0.50
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on stge1, link-type EN10MB (Ethernet), capture size 96 bytes
15:28:30.088942 IP 1.1.84.1.53 > 1.1.193.102.54422: 44158 1/2/3 A 194.87.0.50 (140)
15:28:30.091075 IP 1.1.193.102 > 194.87.0.50: ICMP echo request, id 1024, seq 60416, length 40
15:28:30.114489 IP 194.87.0.50 > 1.1.193.102: ICMP echo reply, id 1024, seq 60416, length 40
15:28:31.092182 IP 1.1.193.102 > 194.87.0.50: ICMP echo request, id 1024, seq 60672, length 40


Вродь все нормально в тоже время слушаю локалку на предмет 194.87.0.50


[mvd@aldanmain mvd ]# tcpdump -n -i stge0 | grep 194.87.0.50
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on stge0, link-type EN10MB (Ethernet), capture size 96 bytes
15:32:49.464590 IP 1.1.84.1.53 > 192.168.10.125.60617: 54917 1/2/3 A 194.87.0.50 (140)
^[[C^[[C^[[C^


И ВОТ ОНО - вместо 192.168.10.1 - 192.168.10.125

И тут осенило !!!

natd.conf
redirect_port udp 192.168.10.XX:10000-65535 10000-65535
redirect_port tcp 192.168.10.XX:10000-65535 10000-65535

Вот тут и Грабли поставленны - по неакуратности.
Пасиб за внимание :)