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

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

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

harmless писал(а):Все таки мне удалось сделать доступ к серверу по обоим каналам одновременно:
#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:
Дополнение к этому балансировка на два канала
Делаем замену

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

# 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}
на

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

# 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 prob 0.5 skipto 45100 in via ${LanIn}
${FwCMD} add set 2 setfib 0 in via ${LanIn} keep-state
${FwCMD} add permit in via ${LanIn}
${FwCMD} add 45100 set 2 setfib 1 in via ${LanIn} keep-state
${FwCMD} add permit in via ${LanIn}
и получаем долгожданную балансировку трафика между каналами посредством ядерного НАТА.
И еще для увеличения производительности в секциях по направлениях трафика можно удалить параметры via ${if_name} но направление оставить

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

dilnix
проходил мимо

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

Непрочитанное сообщение dilnix » 2012-10-30 19:15:04

harmless писал(а):Все таки мне удалось сделать доступ к серверу по обоим каналам одновременно:
Подскажите, уважаемый, новичку... По поводу всей остальной настройки для задействования вашего варианта 2-канального доступа.
А именно, что должно быть в rc.conf??? Должен ли присутствовать /usr/local/etc/rc.d/setfib1 (как в 5-ом примере) и что там должно быть???
На данный момент мой rc.conf выглядит так:
gateway_enable="YES"
hostname="graf-gw.xxx.yyy.ua"
ifconfig_rl0="inet 195.xx.yy.250 netmask 255.255.255.248"
ifconfig_rl1="inet 192.168.0.180 netmask 255.255.255.0"
ifconfig_fxp0="inet 10.0.0.1 netmask 255.255.255.0"
defaultrouter="195.xx.yy.249"
ntpdate_flags="europe.pool.ntp.org"
ntpdate_enable="YES"
moused_enable="YES"
allscreens_flags="-m on"
sshd_enable="YES"
sendmail_enable="NONE"
setfib1_enable="YES"
setfib1_defaultroute="192.168.0.1"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_nat_enable="YES"
dummynet_enable="YES"
dnsmasq_enable="YES"
rpcbind_enable="YES"
mountd_flags="-r"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
В sysctl.conf только одна запись:
net.inet.ip.fw.one_pass=0
Из машин подключенных в сеть 10.0.0.0/24 сервер пинается, но шлюзы - нет... Не выпускает он никого...
Могу еще показать еще вывод ipfw show:
00100 17233 1979668 reass ip from any to any in
00200 0 0 skipto 65534 icmp from any to any frag
00300 0 0 skipto 65534 icmp from any to any in icmptypes 5,9,13,14,15,16,17
00400 0 0 skipto 65534 ip from any to any dst-ip me ipoptions ssrr,lsrr,rr,ts
00500 0 0 reject tcp from any to any { tcpflags syn,fin,ack,psh,rst,urg or tcpflags !syn,!fin,!ack,!psh,!rst,!urg }
00600 0 0 reject tcp from any to any not established tcpflags fin
00700 0 0 skipto 15000 ip from any to any in via lo0
00800 0 0 skipto 20000 ip from any to any out via lo0
00900 11632 1149430 skipto 25000 ip from any to any in via rl0
01000 152 10267 skipto 30000 ip from any to any out via rl0
01100 4698 776826 skipto 35000 ip from any to any in via rl1
01200 827 43199 skipto 40000 ip from any to any out via rl1
01300 903 53412 skipto 45000 ip from any to any in via fxp0
01400 39 10046 skipto 50000 ip from any to any out via fxp0
01500 0 0 skipto 65534 ip from any to any
15000 0 0 count ip from any to any in via lo0
15100 0 0 allow ip from any to any in via lo0
20000 0 0 count ip from any to any out via lo0
20100 0 0 allow ip from any to any out via lo0
25000 11632 1149430 count ip from any to any in via rl0
25100 0 0 skipto 65534 icmp from any to 255.255.255.255 in via rl0
25200 11458 1126283 skipto 65534 ip from any to any not dst-ip 195.xx.yy.250 in via rl0
25300 174 23147 nat 4 ip from any to any dst-ip 195.xx.yy.250 in via rl0
25400 53 3582 allow tcp from any to 195.xx.yy.250 in via rl0 established
25500 0 0 allow tcp from any to 195.xx.yy.250 dst-port 20,21,50000-60000,53,25,465,110,995,143,993,80,443 in via rl0 setup keep-state
25600 0 0 allow udp from any to 195.xx.yy.250 dst-port 53,123 in via rl0 keep-state
25700 6 264 allow log logamount 50 tcp from any to 195.xx.yy.250 dst-port 22 in via rl0 setup keep-state
25800 0 0 allow ip from any to any dst-ip table(100) in via rl0
25900 0 0 allow icmp from any to 195.xx.yy.250 in via rl0 keep-state
26000 6 1071 skipto 65534 ip from any to any in via rl0
30000 152 10267 count ip from any to any out via rl0
30100 0 0 skipto 65534 icmp from any to 255.255.255.255 out via rl0
30200 0 0 skipto 65534 ip from any to any dst-ip 127.0.0.0/8 out via rl0
30300 0 0 nat global ip from any to any src-ip table(100) out via rl0
30400 150 10115 skipto 34000 ip from any to any src-ip 195.xx.yy.250 out via rl0
30500 0 0 fwd 192.168.0.1 ip from any to any src-ip 192.168.0.180
30600 0 0 nat 4 ip from any to any src-ip table(100) out via rl0
34000 259 28345 allow ip from any to any src-ip 195.xx.yy.250 out via rl0 keep-state
34100 2 152 skipto 65534 ip from any to any out via rl0
35000 4698 776826 count ip from any to any in via rl1
35100 4689 774366 skipto 65534 ip from any to any not dst-ip 192.168.0.180 in via rl1
35200 0 0 skipto 65534 icmp from any to 255.255.255.255 in via rl1
35300 0 0 skipto 65534 ip from any to any src-ip 127.0.0.0/8 in via rl1
35400 9 2460 nat 5 ip from any to any dst-ip 192.168.0.180 in via rl1
35500 0 0 allow tcp from any to 192.168.0.180 in via rl1 established
35600 0 0 allow tcp from any to 192.168.0.180 dst-port 20,21,50000-60000,53,25,465,110,995,143,993,80,443 in via rl1 setup keep-state
35700 0 0 allow udp from any to 192.168.0.180 dst-port 53,123 in via rl1 keep-state
35800 0 0 allow log logamount 50 tcp from any to 192.168.0.180 dst-port 22 in via rl1 setup keep-state
35900 0 0 allow ip from any to any dst-ip table(100) in via rl1
36000 0 0 allow icmp from any to 192.168.0.180 in via rl1 keep-state
36100 0 0 skipto 65534 ip from any to any in via rl1
40000 827 43199 count ip from any to any out via rl1
40100 0 0 skipto 65534 icmp from any to 255.255.255.255 out via rl1
40200 0 0 skipto 65534 ip from any to any dst-ip 127.0.0.0/8 out via rl1
40300 0 0 nat global ip from any to any src-ip table(100) out via rl1
40400 15 903 skipto 44000 ip from any to any src-ip 192.168.0.180 out via rl1
40500 0 0 fwd 195.xx.yy.249 ip from any to any src-ip 195.xx.yy.250
40600 0 0 nat 5 ip from any to any src-ip table(100) out via rl1
44000 24 3363 allow ip from any to any src-ip 192.168.0.180 out via rl1 keep-state
44100 812 42296 skipto 65534 ip from any to any out via rl1
45000 903 53412 count ip from any to any in via fxp0
45100 0 0 skipto 65534 ip from any to any src-ip 127.0.0.0/8 in via fxp0
45200 903 53412 setfib 1 ip from any to any in via fxp0
45300 903 53412 allow ip from any to any in via fxp0
50000 39 10046 count ip from any to any out via fxp0
50100 0 0 skipto 65534 ip from any to any dst-ip 127.0.0.0/8 out via fxp0
50200 39 10046 allow ip from any to any out via fxp0
65534 16966 1944090 deny ip from any to any
65535 25 2352 deny ip from any to any
Скажите, если что еще что надо показать...
Ну и естественно, пока сервер не доступен извне, также как и из локалки =/

dilnix
проходил мимо

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

Непрочитанное сообщение dilnix » 2012-10-31 1:55:51

А еще точнее, подскажите мне, что должно быть в моем случае в rc.local???

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

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

Непрочитанное сообщение harmless » 2012-11-14 15:55:46

dilnix писал(а):А еще точнее, подскажите мне, что должно быть в моем случае в rc.local???
Извините что так долго не отвечал - не было под рукой компьютера
В /etc/rc.conf все стандартно - ничего добавлять не нужно - настройка сетевых карт да и демоны какие вам нужны. Но я удалил маршрут по-умолчанию.
В /etc/firewall.conf

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

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

NetOut_1="192.168.1.0/24"
IpOut_1="192.168.1.51"
LanOut_1="vr0"

GW_1="192.168.1.1"

#*******************************************#
NetOut_2="192.168.2.0/24"
IpOut_2="192.168.2.3"
LanOut_2="re0"
GW_2="192.168.2.1"
# тут задаются маршруты для фибов
/usr/sbin/setfib -1 route add default ${GW_2}
/usr/sbin/setfib -0 route add default ${GW_1}
# дальше конфиг фаерволла из поста выше

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

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

Непрочитанное сообщение harmless » 2012-11-14 16:03:52

Вывод правил

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

00001 reass in
00022 skipto 65534 icmp from any to any frag
00023 skipto 65534 icmp from any to any in icmptypes 5,9,13,14,15,16,17
00024 skipto 65534 dst-ip me ipoptions ssrr,lsrr,rr,ts
00025 reject tcp from any to any { tcpflags syn,fin,ack,psh,rst,urg or tcpflags !syn,!fin,!ack,!psh,!rst,!urg }
00026 reject tcp from any to any not established tcpflags fin
00027 skipto 15000 in via lo0
00028 skipto 20000 out via lo0
00029 skipto 25000 in via vr0
00030 skipto 30000 out via vr0
00031 skipto 35000 in via re0
00032 skipto 40000 out via re0
00033 skipto 45000 in via em0
00034 skipto 50000 out via em0
00035 skipto 65534
15000 count in
15001 allow in
20000 count out
20001 allow out
25000 count in
25001 skipto 65534 icmp from any to 255.255.255.255 in
25002 skipto 65534 not dst-ip 192.168.1.51 in
25003 skipto 65534 src-ip 127.0.0.0/8 in
25006 nat 4 dst-ip 192.168.1.51 in
25007 allow tcp from any to 192.168.1.51 dst-port 20,21,50000-60000,53,25,465,110,995,143,993,80,443,10011,30033 in setup
25008 allow udp from any to 192.168.1.51 dst-port 53,123,6277,9987 in keep-state
25009 allow log logamount 100 tcp from any to 192.168.1.51 dst-port 22 in setup
25010 allow tcp from any to 192.168.1.51 in established
25011 allow dst-ip table(100) in
25012 allow icmp from any to 192.168.1.51 in keep-state
25013 skipto 65534 in
30000 count out
30001 skipto 65534 icmp from any to 255.255.255.255 out
30002 skipto 65534 dst-ip 127.0.0.0/8 out
30005 nat global src-ip table(100) out
30006 skipto 34000 src-ip 192.168.1.51 out
30007 fwd 192.168.2.1 src-ip 192.168.2.3
30008 nat 4 src-ip table(100) out
34000 allow src-ip 192.168.1.51 out keep-state
34001 skipto 65534 out
35000 count in
35001 skipto 65534 not dst-ip 192.168.2.3 in
35002 skipto 65534 icmp from any to 255.255.255.255 in
35003 skipto 65534 src-ip 127.0.0.0/8 in
35006 nat 5 dst-ip 192.168.2.3 in
35007 allow tcp from any to 192.168.2.3 dst-port 20,21,50000-60000,53,25,465,110,995,143,993,80,443,10011,30033 in setup
35008 allow udp from any to 192.168.2.3 dst-port 53,123,6277,9987 in keep-state
35009 allow log logamount 100 tcp from any to 192.168.2.3 dst-port 22 in setup
35010 allow tcp from any to 192.168.2.3 in established
35011 allow dst-ip table(100) in
35012 allow icmp from any to 192.168.2.3 in keep-state
35013 skipto 65534 in
40000 count out
40001 skipto 65534 icmp from any to 255.255.255.255 out
40002 skipto 65534 dst-ip 127.0.0.0/8 out
40005 nat global src-ip table(100) out
40006 skipto 44000 src-ip 192.168.2.3 out
40007 fwd 192.168.1.1 src-ip 192.168.1.51
40008 nat 5 src-ip table(100) out
44000 allow src-ip 192.168.2.3 out keep-state
44001 skipto 65534 out
45000 count in
45001 skipto 65534 src-ip 127.0.0.0/8 in
45003 fwd 127.0.0.1,80 tcp from not table(100) to not me dst-port 80,443 in
45004 skipto 65534 not src-ip table(100) not dst-ip me in
45005 setfib 1 in
45006 allow in fib 1
45007 skipto 65534 in
50000 count out
50001 skipto 65534 dst-ip 127.0.0.0/8 out
50003 allow out
50004 skipto 65534 out
65534 deny
65535 allow ip from any to any
В таблице 100 ипы, которым разрешен выход в интернет.

dilnix
проходил мимо

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

Непрочитанное сообщение dilnix » 2012-12-20 12:46:09

Спасибо!
Я не удержался, еще до вашего ответа сделал немного по-другому...
Но обязательно пригодится, ибо рано или поздно нужно будет избавляться от костылей =)

Аватара пользователя
dilnix
проходил мимо
Сообщения: 7
Зарегистрирован: 2012-12-20 17:51:29
Откуда: Ukraine
Контактная информация:

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

Непрочитанное сообщение dilnix » 2012-12-24 18:40:59

Итак...
Пришла пора избавляться от костылей... Ибо не работает.
Сначала все работало отлично, когда в rc.firewall было всего 6 или 7 правил...
Но понадобилось доработать под некоторые нужды, сформулировал и добавил требуемые правила. Только теперь система меня не пропускает на внешние шлюзы, ни на первый ни на второй.
Привожу ниже всю конфигурацию и в конце дескрипшн проблемы.
файл rc.conf:

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

gateway_enable="YES"
hostname="graf-new-gw.bis.net.ua"
ifconfig_rl0="inet 195.xx.yy.46 netmask 255.255.255.252"
ifconfig_rl0_alias0="inet 195.xx.zz.49 netmask 255.255.255.240"
ifconfig_rl1="inet 10.0.0.2 netmask 255.255.255.0"
ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0"
defaultrouter="195.xx.yy.45"
##defaultrouter="10.0.0.1"
ntpdate_flags="europe.pool.ntp.org"
ntpdate_enable="YES"
moused_enable="YES"
allscreens_flags="-m on"
sshd_enable="YES"
sendmail_enable="NONE"
setfib1_enable="YES"
setfib1_defaultroute="10.0.0.1"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_nat_enable="YES"
dummynet_enable="YES"
dnsmasq_enable="YES"
openvpn_enable="NONE"
rpcbind_enable="YES"
mountd_flags="-r"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
rl0 и rl1 смотрят на провайдеров... у второго прова dhcp, потому промежуточно воткнул простейший роутер от D-link с выключенными dhcp и файерволом... далее дефолтовое ядро с добавлением всего, что может пригодиться:

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

include GENERIC
ident KERNEL
options IPFIREWALL
options IPFIREWALL_FORWARD
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_NAT
options IPDIVERT
options LIBALIAS
options ROUTETABLES=2
options DUMMYNET
в sysctl.conf стоит:

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

net.inet.ip.fw.one_pass=0
и в итоге смастерил я такой вот rc.firewall:

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

#!/bin/sh

# ipfw bin
FwCMD="/sbin/ipfw -q "

# ISP1 network 
ext_net1="195.xx.yy.45/30"
# ISP1 IP
ext_ip1="195.xx.yy.46"
# ISP2 interface
ext_if1="rl0"
ext_gw1="195.xx.yy.45"

# ISP2 network
ext_net2="10.0.0.0/24"
# ISP2 IP
ext_ip2="10.0.0.2"
# ISP2 interface
ext_if2="rl1"
ext_gw2="10.0.0.1"

# Lan network
int_net="192.168.0.0/24"
# Lan IP
int_ip="192.168.0.1"
# Lan interface
int_if="fxp0"

# Video server
vid_ip="192.168.0.222"

# External aliases
ext_al1="195.xx.zz.49"
ext_al2="195.xx.zz.50"
ext_al3="195.xx.zz.51"
ext_al4="195.xx.zz.52"
ext_al5="195.xx.zz.53"
ext_al6="195.xx.zz.54"
ext_al7="195.xx.zz.55"
ext_al8="195.xx.zz.56"
ext_al9="195.xx.zz.57"
ext_ala="195.xx.zz.58"
ext_alb="195.xx.zz.59"
ext_alc="195.xx.zz.60"
ext_ald="195.xx.zz.61"
ext_ale="195.xx.zz.62"

# BlueTone customers
int_bt1="192.168.0.110"
int_bt2="192.168.0.111"
int_bt3="192.168.0.120"
int_bt4="192.168.0.121"
int_bt5="192.168.0.130"
int_bt6="192.168.0.131"
int_bt7="192.168.0.140"
int_bt8="192.168.0.141"
int_bt9="192.168.0.150"
int_bta="192.168.0.151"
int_btb="192.168.0.160"
int_btc="192.168.0.161"
int_btd="192.168.0.190"
int_bte="192.168.0.191"

cat /usr/local/etc/ipfw/btone | while read line; do
ipfw table 1 add $line
done

cat /usr/local/etc/ipfw/allowed | while read line; do
ipfw table 2 add $line
done

${FwCMD} -f flush  #old

${FwCMD} nat 1 config log if $ext_if1 same_ports reset redirect_port tcp $ext_ip1:8822 8822 \
redirect_port tcp $vid_ip:8080 8080 \
redirect_port tcp $vid_ip:3389 13389 \
redirect_port tcp $vid_ip:3390 13390  #old

${FwCMD} nat 2 config log if $ext_if2 same_ports reset redirect_port tcp $ext_ip2:8822 8822 \
redirect_port tcp $vid_ip:8080 8080 \
redirect_port tcp $vid_ip:3389 13389 \
redirect_port tcp $vid_ip:3390 13390  #old

${FwCMD} nat 11 config log ip $ext_al1 same_ports reset
${FwCMD} nat 12 config log ip $ext_al2 same_ports reset
${FwCMD} nat 13 config log ip $ext_al3 same_ports reset
${FwCMD} nat 14 config log ip $ext_al4 same_ports reset
${FwCMD} nat 15 config log ip $ext_al5 same_ports reset
${FwCMD} nat 16 config log ip $ext_al6 same_ports reset
${FwCMD} nat 17 config log ip $ext_al7 same_ports reset
${FwCMD} nat 18 config log ip $ext_al8 same_ports reset
${FwCMD} nat 19 config log ip $ext_al9 same_ports reset
${FwCMD} nat 20 config log ip $ext_ala same_ports reset
${FwCMD} nat 21 config log ip $ext_alb same_ports reset
${FwCMD} nat 22 config log ip $ext_alc same_ports reset
${FwCMD} nat 23 config log ip $ext_ald same_ports reset
${FwCMD} nat 24 config log ip $ext_ale same_ports reset

${FwCMD} pipe 100 config bw 1Mbit/s mask src-ip 0xffffffff  #old
${FwCMD} pipe 200 config bw 1Mbit/s mask dst-ip 0xffffffff  #old

${FwCMD} add 100 skipto 300 tag 1 in recv $ext_if1 keep-state  #old
${FwCMD} add 200 skipto 400 tag 2 in recv $ext_if2 keep-state  #old
${FwCMD} add 300 setfib 0 tagged 1  #old
${FwCMD} add 400 setfib 1 tagged 2  #old

${FwCMD} add 410 pipe 100 ip from $int_net to any via $int_if in  #old
${FwCMD} add 420 pipe 200 ip from any to $int_net via $int_if out  #old

${FwCMD} add 500 deny ip from table\(1\) to any 80,8080 via $ext_if1 out
${FwCMD} add 501 deny ip from any 80,8080 to table\(1\) via $ext_if1 in
${FwCMD} add 510 deny ip from table\(1\) to any 80,8080 via $ext_if2 out
${FwCMD} add 511 deny ip from any 80,8080 to table\(1\) via $ext_if2 in
${FwCMD} add 600 allow ip from table\(1\) to table\(2\) 80,8080 via $ext_if1 out
${FwCMD} add 601 allow ip from table\(2\) 80,8080 to table\(1\) via $ext_if1 in
${FwCMD} add 610 allow ip from table\(1\) to table\(2\) 80,8080 via $ext_if2 out
${FwCMD} add 611 allow ip from table\(2\) 80,8080 to table\(1\) via $ext_if2 in

${FwCMD} add 700 allow ip from { not table\(1\) } to any via $ext_if1 out
${FwCMD} add 701 allow ip from any to { not table\(1\) } via $ext_if1 in
${FwCMD} add 800 allow ip from { not table\(1\) } to any via $ext_if2 out
${FwCMD} add 801 allow ip from any to { not table\(1\) } via $ext_if2 in

${FwCMD} add 1000 allow all from any to any via $int_if  #old

${FwCMD} add 1001 nat 11 ip from $int_bt1 to any via $ext_if1
${FwCMD} add 1002 nat 12 ip from $int_bt2 to any via $ext_if1
${FwCMD} add 1003 nat 13 ip from $int_bt3 to any via $ext_if1
${FwCMD} add 1004 nat 14 ip from $int_bt4 to any via $ext_if1
${FwCMD} add 1005 nat 15 ip from $int_bt5 to any via $ext_if1
${FwCMD} add 1006 nat 16 ip from $int_bt6 to any via $ext_if1
${FwCMD} add 1007 nat 17 ip from $int_bt7 to any via $ext_if1
${FwCMD} add 1008 nat 18 ip from $int_bt8 to any via $ext_if1
${FwCMD} add 1009 nat 19 ip from $int_bt9 to any via $ext_if1
${FwCMD} add 1010 nat 20 ip from $int_bta to any via $ext_if1
${FwCMD} add 1011 nat 21 ip from $int_btb to any via $ext_if1
${FwCMD} add 1012 nat 22 ip from $int_btc to any via $ext_if1
${FwCMD} add 1013 nat 23 ip from $int_btd to any via $ext_if1
${FwCMD} add 1014 nat 24 ip from $int_bte to any via $ext_if1

${FwCMD} add 1100 nat 1 ip from any to any via $ext_if1  #old
${FwCMD} add 1200 nat 2 ip from any to any via $ext_if2  #old
...и скрипт отлично отрабатывает по крону во всех 4-х тестовых ситуациях наличия/отсутствия интернета на самом сервере... вот он:

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

#! /bin/1~sh
# path to binaries
setfib0="/usr/sbin/setfib -0"
setfib1="/usr/sbin/setfib -1"
route="/sbin/route"
ping="/sbin/ping"
sleep="/bin/sleep"
killall="/usr/bin/killall"
touch="/usr/bin/touch"
rm="/bin/rm"

# gateways
GW1=195.xx.yy.45
GW2=10.0.0.1
GWm=8.8.8.8

# testing GW1
$setfib0 $ping -q -c 3 -f -s 8 -o -t 2 $GWm > /dev/null 2>&1

# if code 0 = error
if [ $? != 0 ]; then
        # testing GW2
        $setfib1 $ping -q -c 3 -f -s 8 -o -t 2 $GWm > /dev/null 2>&1
        # if code 0 = true
        if [ $? = 0 ]; then
                # if no file gw2.changed, creating it
                if [ ! -f /tmp/gw2.changed ]; then
        # deleting default route
	        $route delete default
	# adding new default route
		$route add default $GW2
	# create file
	        $touch /tmp/gw2.changed
	# wait 2 seconds
	        $sleep 2
	# restarting firewall
	        /etc/rc.d/ipfw restart
	        exit 0;
		fi
	else
		echo "All channels are broken";
		exit 1;
	fi
else
	# if GW1 is up & found file gw2.changed, so delete it and set GW1 as default route
	if [ -f /tmp/gw2.changed ]; then
		$route delete default
		$route add default $GW1
		$rm /tmp/gw2.changed
		$sleep 2
		/etc/rc.d/ipfw restart
		exit 0;
	fi
	echo "Main channel is up";
	exit 0;
fi
Но получается, что я из локалки вижу интерфейсы сервера. Пинаются и 195.xx.yy.46 и 10.0.0.2. Но шлюз ни один не пинается... Ни 195.xx.yy.45, ни 10.0.0.1 и выхода в интернет нету...
Гляньте пожалуйста, профессионалы. Может я где сделал грубую ошибку и никак не могу ее увидеть =/ :st:
Улыбнитесь =) Народ без интернета жить не может...

Аватара пользователя
dilnix
проходил мимо
Сообщения: 7
Зарегистрирован: 2012-12-20 17:51:29
Откуда: Ukraine
Контактная информация:

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

Непрочитанное сообщение dilnix » 2013-01-02 18:19:31

Возможно ли вообще с помощью IPFW объединить условный НАТ с ограничением внешнего доступа для нескольких разных отделов??? Примерно как я пытался в том примере, выложенном в предыдущем посте...

Условный НАТ нужен потому, что есть программа у целого отдела работников, которая стучится на один и тот же сервер в США и нужно чтобы сервер видел эти запросы как будто с разных внешних адресов (пул есть свой). При этом, чтобы они могли по HTTP лезть только на некоторые ресурсы, а не во весь интернет. Это отдел А. Есть еще отдел Б - тоже работники, которые никакую программу не используют, условный НАТ им не нужен, только общий, но они также должны ограничиться только доступом на некоторые ресурсы (те же, что и для отдела А). Ну и конечно же маленький отдел В - руководство... Которое не имеет никаких ограничений и НАТится общим натом. Все это усложняется наличием 2-х каналов интернет, чисто для резервирования. Кроме этого, есть небольшой сервер видеонаблюдения, на который требуется проброс нескольких портов для доступа через оба канала.
В общем именно это у меня и не получается осуществить посредством только файрвола с ядреным НАТом не прибегая ко всяким прозрачным прокси и тп.

Умные люди, все было хорошо до добавления в конфиг условного НАТа и ограничений для отделов (когда все для всех было открыто).
Точнее, резервирование с помощью скрипта в кроне работает, редирект портов на сервер видеонаблюдения работает через оба канала, но все куда хотят туда и ходят и программа на 2-х и выше параллельных подключениях ломается... Помогите а??? Необязательно готовое решение выдавать, помогите понять логику файрвола, как искать ошибки, подскажите где они могут быть... Пожалуйста!!!
Улыбнитесь =) Народ без интернета жить не может...

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

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

Непрочитанное сообщение harmless » 2013-01-02 18:40:09

С НОВЫМ ГОДОМ Товарищи!!!
Схему лучше нарисуйте.

Аватара пользователя
dilnix
проходил мимо
Сообщения: 7
Зарегистрирован: 2012-12-20 17:51:29
Откуда: Ukraine
Контактная информация:

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

Непрочитанное сообщение dilnix » 2013-01-03 15:57:19

Ах да, с праздничками!
Как нарисую - выложу... Но вообще-то все должно быть и так понятно... Есть один внутренний интерфейс и два внешних от разных провайдеров.
Простейшая резервация работает за счет простейшей связки правил:

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

${FwCMD} nat 1 config log if $ext_if1 same_ports reset redirect_port tcp $ext_ip1:8822 8822
${FwCMD} nat 2 config log if $ext_if2 same_ports reset redirect_port tcp $ext_ip2:8822 8822

${FwCMD} add 100 skipto 300 tag 1 in recv $ext_if1 keep-state
${FwCMD} add 200 skipto 400 tag 2 in recv $ext_if2 keep-state
${FwCMD} add 300 setfib 0 tagged 1
${FwCMD} add 400 setfib 1 tagged 2
${FwCMD} add 500 allow all from any to any via $int_if
${FwCMD} add 600 nat 1 ip from any to any via $ext_if1
${FwCMD} add 700 nat 2 ip from any to any via $ext_if2
+ скрипт в кроне, который мониторит выход в инет и меняет дефолтовый маршрут при надобности...

Теперь нужно всей локалке позволить ходить только на некоторые сайты (таблица2), руководству (таблица3) позволить ходить везде. При этом, чтобы все кроме отдела "Звонилок" (таблица1) НАТились по-умолчанию, как и пару строк выше... а отдел "Звонилок" НАТился отдельно каждому по своей АЙпишке =)
Ну и плюс парочку портов пробросить, что в данном случае проще всего.

Сегодня стер разрешающие-запрещающие правила и почитав "Заметки о IPFW" решил заново написать их, только последовательно проходя по пути прохождения пакетов. Вот что получилось:

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

one_pass=0

#!/bin/sh

#############################################
#****** FireWall - configuration file ******#
#############################################
# ipfw bin
FwCMD="/sbin/ipfw -q "

# ISP1 network 
ext_net1="195.xx.yy.45/30"
# ISP1 IP
ext_ip1="195.xx.yy.46"
# ISP2 interface
ext_if1="rl0"
ext_gw1="195.xx.yy.45"

# ISP2 network
ext_net2="10.0.0.0/24"
# ISP2 IP
ext_ip2="10.0.0.2"
# ISP2 interface
ext_if2="rl1"
ext_gw2="10.0.0.1"

# Lan network
int_net="192.168.0.0/24"
# Lan IP
int_ip="192.168.0.1"
# Lan interface
int_if="fxp0"

# Video server
vid_ip="192.168.0.222"

# External aliases
ext_al1="195.xx.zz.49"
ext_al2="195.xx.zz.50"
ext_al3="195.xx.zz.51"
ext_al4="195.xx.zz.52"
ext_al5="195.xx.zz.53"
ext_al6="195.xx.zz.54"
ext_al7="195.xx.zz.55"
ext_al8="195.xx.zz.56"
ext_al9="195.xx.zz.57"
ext_ala="195.xx.zz.58"
ext_alb="195.xx.zz.59"
ext_alc="195.xx.zz.60"
ext_ald="195.xx.zz.61"
ext_ale="195.xx.zz.62"

# BlueTone customers
int_bt1="192.168.0.110"
int_bt2="192.168.0.111"
int_bt3="192.168.0.120"
int_bt4="192.168.0.121"
int_bt5="192.168.0.130"
int_bt6="192.168.0.131"
int_bt7="192.168.0.140"
int_bt8="192.168.0.141"
int_bt9="192.168.0.150"
int_bta="192.168.0.151"
int_btb="192.168.0.160"
int_btc="192.168.0.161"
int_btd="192.168.0.190"
int_bte="192.168.0.191"

${FwCMD} -f flush
${FwCMD} -f table all flush

cat /usr/local/etc/ipfw/btone | while read line; do
/sbin/ipfw table 1 add $line
done

cat /usr/local/etc/ipfw/allowed | while read line; do
/sbin/ipfw table 2 add $line
done

cat /usr/local/etc/ipfw/vips | while read line; do
/sbin/ipfw table 3 add $line
done

${FwCMD} nat 1 config log if $ext_if1 same_ports reset redirect_port tcp $ext_ip1:8822 8822 \
redirect_port tcp $vid_ip:8080 8080 \
redirect_port tcp $vid_ip:3389 13389 \
redirect_port tcp $vid_ip:3390 13390

${FwCMD} nat 2 config log if $ext_if2 same_ports reset redirect_port tcp $ext_ip2:8822 8822 \
redirect_port tcp $vid_ip:8080 8080 \
redirect_port tcp $vid_ip:3389 13389 \
redirect_port tcp $vid_ip:3390 13390

${FwCMD} nat 11 config ip $ext_al1 same_ports reset
${FwCMD} nat 12 config ip $ext_al2 same_ports reset
${FwCMD} nat 13 config ip $ext_al3 same_ports reset
${FwCMD} nat 14 config ip $ext_al4 same_ports reset
${FwCMD} nat 15 config ip $ext_al5 same_ports reset
${FwCMD} nat 16 config ip $ext_al6 same_ports reset
${FwCMD} nat 17 config ip $ext_al7 same_ports reset
${FwCMD} nat 18 config ip $ext_al8 same_ports reset
${FwCMD} nat 19 config ip $ext_al9 same_ports reset
${FwCMD} nat 20 config ip $ext_ala same_ports reset
${FwCMD} nat 21 config ip $ext_alb same_ports reset
${FwCMD} nat 22 config ip $ext_alc same_ports reset
${FwCMD} nat 23 config ip $ext_ald same_ports reset
${FwCMD} nat 24 config ip $ext_ale same_ports reset

${FwCMD} pipe 1 config bw 1Mbit/s # mask src-ip 0xffffffff
${FwCMD} pipe 2 config bw 1Mbit/s # mask dst-ip 0xffffffff
${FwCMD} add 1 pipe 1 ip from $int_net to any in via $int_if
${FwCMD} add 2 pipe 2 ip from any to $int_net out via $int_if

${FwCMD} add 10 allow ip from any to any via lo0
#${FwCMD} add 11 allow icmp from any to any icmptypes 0,8,11

${FwCMD} add 100 skipto 210 tag 1 in recv $ext_if1 keep-state
${FwCMD} add 200 skipto 220 tag 2 in recv $ext_if2 keep-state
${FwCMD} add 210 setfib 0 tagged 1
${FwCMD} add 220 setfib 1 tagged 2

${FwCMD} add 241 nat 1 ip from not "table(1)" to any via $ext_if1
${FwCMD} add 242 nat 2 ip from not "table(1)" to any via $ext_if2
${FwCMD} add 301 nat 11 ip from $int_bt1 to any via $ext_if1
${FwCMD} add 302 nat 12 ip from $int_bt2 to any via $ext_if1
${FwCMD} add 303 nat 13 ip from $int_bt3 to any via $ext_if1
${FwCMD} add 304 nat 14 ip from $int_bt4 to any via $ext_if1
${FwCMD} add 305 nat 15 ip from $int_bt5 to any via $ext_if1
${FwCMD} add 306 nat 16 ip from $int_bt6 to any via $ext_if1
${FwCMD} add 307 nat 17 ip from $int_bt7 to any via $ext_if1
${FwCMD} add 308 nat 18 ip from $int_bt8 to any via $ext_if1
${FwCMD} add 309 nat 19 ip from $int_bt9 to any via $ext_if1
${FwCMD} add 310 nat 20 ip from $int_bta to any via $ext_if1
${FwCMD} add 311 nat 21 ip from $int_btb to any via $ext_if1
${FwCMD} add 312 nat 22 ip from $int_btc to any via $ext_if1
${FwCMD} add 313 nat 23 ip from $int_btd to any via $ext_if1
${FwCMD} add 314 nat 24 ip from $int_bte to any via $ext_if1

${FwCMD} add 400 allow ip from $int_net to any in via $int_if
${FwCMD} add 401 allow ip from "table(3)" to any out via $ext_if1
${FwCMD} add 402 allow ip from "table(3)" to any out via $ext_if2
${FwCMD} add 403 deny ip from not "table(3)" to any 80,8080 out via $ext_if1
${FwCMD} add 404 deny ip from not "table(3)" to any 80,8080 out via $ext_if2
${FwCMD} add 405 allow ip from not "table(3)" to "table(2)" 80,8080 out via $ext_if1
${FwCMD} add 406 allow ip from not "table(3)" to "table(2)" 80,8080 out via $ext_if2
${FwCMD} add 410 allow ip from any to "table(3)" in via $ext_if1
${FwCMD} add 411 allow ip from any to "table(3)" in via $ext_if2
${FwCMD} add 412 deny ip from any 80,8080 to not "table(3)" in via $ext_if1
${FwCMD} add 413 deny ip from any 80,8080 to not "table(3)" in via $ext_if2
${FwCMD} add 414 allow ip from "table(2)" 80,8080 to not "table(3)" in via $ext_if1
${FwCMD} add 415 allow ip from "table(2)" 80,8080 to not "table(3)" in via $ext_if2
${FwCMD} add 432 allow ip from any to "table(3)" out via $int_if
${FwCMD} add 433 allow ip from "table(2)" 80,8080 to not "table(3)" out via $int_if

${FwCMD} add 65534 deny all from any to any
Улыбнитесь =) Народ без интернета жить не может...

Аватара пользователя
dilnix
проходил мимо
Сообщения: 7
Зарегистрирован: 2012-12-20 17:51:29
Откуда: Ukraine
Контактная информация:

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

Непрочитанное сообщение dilnix » 2013-01-03 15:59:08

Только не работает =/
Видимо моя логика совсем отличается от логики файера...
Улыбнитесь =) Народ без интернета жить не может...

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

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

Непрочитанное сообщение harmless » 2013-01-03 23:16:00

Сорри, я сейчас не за компом.
Давай через часа 2 со времени поста или завтра(какая благодать человеческие условия труда) буду весь день дома.

Аватара пользователя
dilnix
проходил мимо
Сообщения: 7
Зарегистрирован: 2012-12-20 17:51:29
Откуда: Ukraine
Контактная информация:

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

Непрочитанное сообщение dilnix » 2013-01-04 10:53:57

Не вопрос, я уже есть... сервак отдельно рядом стоит... если есть желание, можем задействовать обменку типа скайпа, логин тот же что и тут... в долгу не останусь =)
Улыбнитесь =) Народ без интернета жить не может...

Diam0n
проходил мимо
Сообщения: 5
Зарегистрирован: 2011-09-08 10:28:48

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

Непрочитанное сообщение Diam0n » 2013-01-24 3:52:57

Присоединяюсь к сабжу.
Умные люди рассказали про nat option global, вот

У меня по 5 примеру все получилось, кроме....
2й канал пингуется и через него есть выход в инет, но ни пробросы ни доступ к шлюзу из вне не работает(

Аватара пользователя
dilnix
проходил мимо
Сообщения: 7
Зарегистрирован: 2012-12-20 17:51:29
Откуда: Ukraine
Контактная информация:

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

Непрочитанное сообщение dilnix » 2013-01-25 13:19:12

ВНИМАНИЕ, НИЖЕ ПРИВЕДЕНО ГОТОВОЕ РЕШЕНИЕ КОНКРЕТНОЙ ЗАДАЧИ
Никаких ограничений нет, мы же свободные люди =) Берите кто хотите и меняйте под себя как заблагорассудится.
Использовался IPFW со своим ядреным НАТом.

В общем, совместными мозгами с многоуважаемым harmless (за что ему огромное спасибо и почет), получилось сотворить рабочий вариант с учетом простого резервирования, без балансировки. Нынче успешно работает на сервере организации. Привожу ниже условия задачи, файл правил ipfw и скрипт переключения. Для тестирования каналов используется setfib. Его скрипт приводить не буду, он и так часто упомянут на данном портале.
Условия задачи:
Организовать разнотипный доступ для организации. Есть руководство (отдельная группа, которым должно быть позволено все) и работники (которым должен быть позволен выход только на некоторые ресурсы). Причем среди работников есть отдельная группа операторов, которые звонят через "проприетарную" программулину, сервер которой находится на другом континенте и требует чтобы каждое соединение осуществлялось с уникального IP адреса. То есть пустить их всех одним НАТом не получиться, нужен "условный НАТ" (я так называю). Сеть организации - только одна (192.168.0.0), и есть 2 живых подключения к интернету через разных провайдеров. Первый провайдер является "своим" и дает сколько надо белых статических адресов для этих самых операторов, плюс качественный канал связи. Второй провайдер - известный всем, но название не буду говорить, чтобы не создавать дополнительных дискуссий =) Он жадный на белые статические адреса и канал связи немного хуже по качеству. Но для редких случаев проблем у основного провайдера подойдет как резервный. Естественно, что отдел операторов пойдет на перекур в случае переключения канала на резервный, ибо "условный НАТ" есть возможность устроить только для основного канала.
Кроме этого, остальные работники работают на тонких клиентах загружаясь с сервера в Убунту. Именно поэтому вы увидите далее, что я убрал трубы с локального интерфейса на внешние, чтобы Убунты не тупили при загрузке =)
В rc.conf заданы алиасы на первый внешний интерфейс, а также запущен setfib, и setfib1_defaultroute установлен на тот же первый шлюз. Это для скрипта переключения. Можно и по-другому, но мне нужно было только резервирование, потому я решил использовать для траффика только первый фиб меняя основной маршрут по необходимости, а второй фиб только для тестирования этих самых маршрутов.
Ну и в добавок ко всему, нужен доступ к видеосерверу внутри локалки и доступ к серверу по SSH по любому из внешних каналов.

Итак, rc.firewall:

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

#!/bin/sh

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

NetOut_ISP1="195.xx.yy.45/30"
IpOut_ISP1="195.xx.yy.46"
IpOut_ISP1_1="195.xx.zz.49" # alias
IpOut_ISP1_2="195.xx.zz.50" # alias
IpOut_ISP1_3="195.xx.zz.51" # alias
IpOut_ISP1_4="195.xx.zz.52" # alias
IpOut_ISP1_5="195.xx.zz.53" # alias
IpOut_ISP1_6="195.xx.zz.54" # alias
IpOut_ISP1_7="195.xx.zz.55" # alias
IpOut_ISP1_8="195.xx.zz.56" # alias
IpOut_ISP1_9="195.xx.zz.57" # alias
IpOut_ISP1_10="195.xx.zz.58" # alias
IpOut_ISP1_11="195.xx.zz.59" # alias
IpOut_ISP1_12="195.xx.zz.60" # alias
IpOut_ISP1_13="195.xx.zz.61" # alias
IpOut_ISP1_14="195.xx.zz.62" # alias
LanOut_ISP1="rl0"
GW_ISP1="195.xx.yy.45"

NetOut_ISP2="10.0.0.0/24"
IpOut_ISP2="10.0.0.2"
LanOut_ISP2="rl1"
GW_ISP2="10.0.0.1"

NetIn="192.168.0.0/24"
IpIn="192.168.0.1"
LanIn="fxp0"

VidIp="192.168.0.222" # videoserver

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


${FwCMD} disable one_pass
${FwCMD} disable debug
${FwCMD} -f flush
${FwCMD} -f pipe flush
${FwCMD} -f queue flush
${FwCMD} -f sched flush
${FwCMD} -f table all flush
/sbin/sysctl net.inet.ip.forwarding=1
/sbin/sysctl net.inet.ip.fastforwarding=1

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

# NAT IN to OUT
# num of table ip num of nat
${FwTable} 1 add 192.168.0.110 1
${FwTable} 1 add 192.168.0.111 2
${FwTable} 1 add 192.168.0.120 3
${FwTable} 1 add 192.168.0.121 4
${FwTable} 1 add 192.168.0.130 5
${FwTable} 1 add 192.168.0.131 6
${FwTable} 1 add 192.168.0.140 7
${FwTable} 1 add 192.168.0.141 8
${FwTable} 1 add 192.168.0.150 9
${FwTable} 1 add 192.168.0.151 10
${FwTable} 1 add 192.168.0.160 11
${FwTable} 1 add 192.168.0.161 12
${FwTable} 1 add 192.168.0.190 13
${FwTable} 1 add 192.168.0.191 14
cat /usr/local/etc/ipfw/net | while read line; do
${FwTable} 1 add $line 100
done

# VIPs
cat /usr/local/etc/ipfw/vips | while read line; do
${FwTable} 3 add $line
done

# allowed content
cat /usr/local/etc/ipfw/allowed | while read line; do
${FwTable} 7 add $line
done

# NAT OUT to IN
# num of table ip num of nat
${FwTable} 10 add ${IpOut_ISP1} 100
${FwTable} 10 add ${IpOut_ISP1_1} 1
${FwTable} 10 add ${IpOut_ISP1_2} 2
${FwTable} 10 add ${IpOut_ISP1_3} 3
${FwTable} 10 add ${IpOut_ISP1_4} 4
${FwTable} 10 add ${IpOut_ISP1_5} 5
${FwTable} 10 add ${IpOut_ISP1_6} 6
${FwTable} 10 add ${IpOut_ISP1_7} 7
${FwTable} 10 add ${IpOut_ISP1_8} 8
${FwTable} 10 add ${IpOut_ISP1_9} 9
${FwTable} 10 add ${IpOut_ISP1_10} 10
${FwTable} 10 add ${IpOut_ISP1_11} 11
${FwTable} 10 add ${IpOut_ISP1_12} 12
${FwTable} 10 add ${IpOut_ISP1_13} 13
${FwTable} 10 add ${IpOut_ISP1_14} 14

# NAT config
${FwCMD} nat 100 config ip ${IpOut_ISP1} unreg_only same_ports reset log redirect_port tcp ${VidIp}:8080 8080 redirect_port tcp ${VidIp}:3389 13389
${FwCMD} nat 1 config ip ${IpOut_ISP1_1} unreg_only same_ports reset log redirect_addr 195.xx.zz.49 192.168.0.110
${FwCMD} nat 2 config ip ${IpOut_ISP1_2} unreg_only same_ports reset log redirect_addr 195.xx.zz.50 192.168.0.111
${FwCMD} nat 3 config ip ${IpOut_ISP1_3} unreg_only same_ports reset log redirect_addr 195.xx.zz.51 192.168.0.120
${FwCMD} nat 4 config ip ${IpOut_ISP1_4} unreg_only same_ports reset log redirect_addr 195.xx.zz.52 192.168.0.121
${FwCMD} nat 5 config ip ${IpOut_ISP1_5} unreg_only same_ports reset log redirect_addr 195.xx.zz.53 192.168.0.130
${FwCMD} nat 6 config ip ${IpOut_ISP1_6} unreg_only same_ports reset log redirect_addr 195.xx.zz.54 192.168.0.131
${FwCMD} nat 7 config ip ${IpOut_ISP1_7} unreg_only same_ports reset log redirect_addr 195.xx.zz.55 192.168.0.140
${FwCMD} nat 8 config ip ${IpOut_ISP1_8} unreg_only same_ports reset log redirect_addr 195.xx.zz.56 192.168.0.141
${FwCMD} nat 9 config ip ${IpOut_ISP1_9} unreg_only same_ports reset log redirect_addr 195.xx.zz.57 192.168.0.150
${FwCMD} nat 10 config ip ${IpOut_ISP1_10} unreg_only same_ports reset log redirect_addr 195.xx.zz.58 192.168.0.151
${FwCMD} nat 11 config ip ${IpOut_ISP1_11} unreg_only same_ports reset log redirect_addr 195.xx.zz.59 192.168.0.160
${FwCMD} nat 12 config ip ${IpOut_ISP1_12} unreg_only same_ports reset log redirect_addr 195.xx.zz.50 192.168.0.161
${FwCMD} nat 13 config ip ${IpOut_ISP1_13} unreg_only same_ports reset log redirect_addr 195.xx.zz.61 192.168.0.190
${FwCMD} nat 14 config ip ${IpOut_ISP1_14} unreg_only same_ports reset log redirect_addr 195.xx.zz.62 192.168.0.191
${FwCMD} nat 200 config if ${LanOut_ISP2} unreg_only same_ports reset log redirect_port tcp ${VidIp}:8080 8080 redirect_port tcp ${VidIp}:3389 13389

# PIPE config
${FwPipe} 1 config bw 1Mbit/s mask src-ip 0xffffffff
${FwPipe} 2 config bw 1Mbit/s mask dst-ip 0xffffffff
${FwPipe} 3 config bw 1Mbit/s mask src-ip 0xffffffff
${FwPipe} 4 config bw 1Mbit/s mask dst-ip 0xffffffff

# Firewall starting here
${FwCMD} add reass in

#${FwCMD} add pipe 1 src-ip table\(1\) src-port ${TCP} in
#${FwCMD} add pipe 2 dst-ip table\(1\) dst-port ${TCP} out

${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
${FwCMD} add permit in

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

# ISP1 LanOut_ISP1
# IN pass
${FwCMD} add 25000 count in
${FwCMD} add skipto 65534 not dst-ip table\(10\) in
${FwCMD} add skipto 65534 icmp from any to any dst-ip 255.255.255.255 in
${FwCMD} add skipto 65534 src-ip 127.0.0.0/8 in
${FwCMD} add nat tablearg dst-ip table\(10\) in
${FwCMD} add pipe 2 dst-ip table\(1\) in
${FwCMD} add permit tcp from any to any dst-ip table\(10\) dst-port ${TCP} in setup
${FwCMD} add permit udp from any to any dst-ip table\(10\) dst-port ${UDP} in keep-state
${FwCMD} add permit log tcp from any to any dst-ip table\(10\) dst-port 8822 in setup
${FwCMD} add permit tcp from any to any dst-ip table\(10\) in established
${FwCMD} add permit dst-ip ${NetIn} in
${FwCMD} add permit icmp from any to any dst-ip table\(10\) in keep-state
${FwCMD} add skipto 65534 in

# OUT pass
${FwCMD} add 30000 count out
${FwCMD} add pipe 1 src-ip table\(1\) out
${FwCMD} add skipto 65534 icmp from any to any dst-ip 255.255.255.255 out
${FwCMD} add skipto 65534 dst-ip 127.0.0.0/8 out
${FwCMD} add nat tablearg src-ip table\(1\) out
${FwCMD} add 34000 permit src-ip table\(10\) out keep-state
${FwCMD} add skipto 65534 out

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

# OUT pass
${FwCMD} add 40000 count out
${FwCMD} add pipe 3 src-ip table\(1\) out
${FwCMD} add skipto 65534 icmp from any to any dst-ip 255.255.255.255 out
${FwCMD} add skipto 65534 dst-ip 127.0.0.0/8 out
${FwCMD} add nat 200 src-ip ${NetIn} out
${FwCMD} add 44000 permit src-ip ${IpOut_ISP2} out keep-state
${FwCMD} add skipto 65534 out

# IN pass
${FwCMD} add 45000 count in
${FwCMD} add reject log logamount 1000 tcp from not table\(3\) to not table\(7\) in
${FwCMD} add permit in
${FwCMD} add skipto 65534 in

# OUT pass
${FwCMD} add 50000 count out
${FwCMD} add permit out
${FwCMD} add skipto 65534 out
Это при net.inet.ip.fw.default_to_accept=0

Скрипт переключения каналов (точнее смены маршрута):

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

#!/bin/sh

ping=`/usr/sbin/setfib -1 /sbin/ping -c 2 8.8.8.8 | grep packets | cut -c 24-24`

routechk="`netstat -rn | fgrep default | awk '{print $2}'`"

gw="195.xx.yy.45"

rezgw="10.0.0.1"

server="8.8.8.8"

$routerchk

if [ $ping = 0 ] && [ $routechk != $rezgw ]

then

echo "no answer" # "answer from gateway was be given"
echo "check default route and correct"
route change default $rezgw

elif [ $ping = 2 ] && [ $routechk != $gw ]

then

echo "GW started to answer"; # "answer from gateway was NOT be given, change route to rezerved gateway";
route change default $gw;

else

echo "it's ok, i will repeat check again at 1 minute"

fi
В общем все прекрасно работает. Весь трафик бегает через первый фиб. Скрипт каждую минуту тестит по второму фибу основной канал, если тест оказывается неудачный, то меняет маршрут в первом фибе на резервный. И продолжает тестить по второму фибу основной канал. Если тот оживает, то происходит обратная смена.
Всем спасибо!
Улыбнитесь =) Народ без интернета жить не может...

Аватара пользователя
dilnix
проходил мимо
Сообщения: 7
Зарегистрирован: 2012-12-20 17:51:29
Откуда: Ukraine
Контактная информация:

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

Непрочитанное сообщение dilnix » 2013-01-25 15:23:43

Забыл добавить описание...
/usr/local/etc/ipfw/net - в этом файле у меня лежат IP адреса локальной сети построчно исключая операторов, что заданы в table 1 отдельно с отдельными аргументами для условного НАТа
/usr/local/etc/ipfw/vips - в этом файле лежат IP адреса локальной сети руководства
/usr/local/etc/ipfw/allowed - ну а в этом IP адреса ресурсов, на которые ходить можно всем...
Ну а как эти адреса кому давать уж каждый сам себе решает =) Самый надежный способ - static dhcp хотя бы для адресов руководства =)
Улыбнитесь =) Народ без интернета жить не может...

lebus
рядовой
Сообщения: 11
Зарегистрирован: 2010-09-23 13:57:07

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

Непрочитанное сообщение lebus » 2013-07-10 15:11:26

dilnix попробовал переделать под себя твоё решение. Я конечно плохо разбираюсь в ipfw, но мне кажется, что используя твои правила, нет возможности заходить по резервному IP на SSH и видеосервер до смены шлюза.
У меня работает вот такая конструкция:

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

cat /etc/ip
# cat /etc/ipfw.rules
add 5 check-state
add 10 skipto 30 tag 1 in recv em0 keep-state
add 20 skipto 30 tag 2 in recv em1 keep-state
add 30 allow { recv em0 or recv em1 }
add 50 fwd 192.168.10.254 tagged 1
add 60 fwd 192.168.30.50 tagged 2
В результате, в независимости от того какой defaultrouter, есть возможность захода по SSH с em0 или em1.
Но сколько я не пытался прикрутить NAT, ничего не получается.

Пробовал это:

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

nat 1 config log if em0 same_ports reset redirect_port tcp 192.168.40.170:3389 13389
nat 2 config log if em1 same_ports reset redirect_port tcp 192.168.40.170:3389 13389

add 5 check-state
add 10 skipto 30 tag 1 in recv em0 keep-state
add 20 skipto 30 tag 2 in recv em1 keep-state
add 30 allow { recv em0 or recv em1 }
add 50 fwd 192.168.10.254 tagged 1
add 60 fwd 192.168.30.50 tagged 2
add 1400 nat 1 ip from any to any via em0
add 1500 nat 2 ip from any to any via em1
SSH есть, а NAT не работает. На 192.168.40.170 интернета нет. И соответственно не пробрасывается порт (redirect_port tcp 192.168.40.170:3389 13389)
Где-то у меня ошибка, но вот где? Может подскажет кто?
Мне и надо всего лишь - allow all, возможность захода по любому IP вне зависимости от прописанного шлюза, ну и что бы проброс портов работал...

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

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

Непрочитанное сообщение harmless » 2013-07-10 21:26:51

lebus писал(а):dilnix попробовал переделать под себя твоё решение. Я конечно плохо разбираюсь в ipfw, но мне кажется, что используя твои правила, нет возможности заходить по резервному IP на SSH и видеосервер до смены шлюза.
У меня работает вот такая конструкция:

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

cat /etc/ip
# cat /etc/ipfw.rules
add 5 check-state
add 10 skipto 30 tag 1 in recv em0 keep-state
add 20 skipto 30 tag 2 in recv em1 keep-state
add 30 allow { recv em0 or recv em1 }
add 50 fwd 192.168.10.254 tagged 1
add 60 fwd 192.168.30.50 tagged 2
В результате, в независимости от того какой defaultrouter, есть возможность захода по SSH с em0 или em1.
Но сколько я не пытался прикрутить NAT, ничего не получается.

Пробовал это:

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

nat 1 config log if em0 same_ports reset redirect_port tcp 192.168.40.170:3389 13389
nat 2 config log if em1 same_ports reset redirect_port tcp 192.168.40.170:3389 13389

add 5 check-state
add 10 skipto 30 tag 1 in recv em0 keep-state
add 20 skipto 30 tag 2 in recv em1 keep-state
add 30 allow { recv em0 or recv em1 }
add 50 fwd 192.168.10.254 tagged 1
add 60 fwd 192.168.30.50 tagged 2
add 1400 nat 1 ip from any to any via em0
add 1500 nat 2 ip from any to any via em1
SSH есть, а NAT не работает. На 192.168.40.170 интернета нет. И соответственно не пробрасывается порт (redirect_port tcp 192.168.40.170:3389 13389)
Где-то у меня ошибка, но вот где? Может подскажет кто?
Мне и надо всего лишь - allow all, возможность захода по любому IP вне зависимости от прописанного шлюза, ну и что бы проброс портов работал...
Погоди чуток - очищю свои правила от ненужного тебе мусора и выложу.

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

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

Непрочитанное сообщение harmless » 2013-07-10 22:30:22

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

00100 reass in // REASS in
02200 skipto 65534 icmp from any to any frag // DROP fragmetations ICMP
02300 skipto 65534 icmp from any to any in icmptypes 5,9,13,14,15,16,17 // DROP ICMP 5,9,13,14,15,16,17
02400 skipto 65534 dst-ip me ipoptions ssrr,lsrr,rr,ts // DROP antihack
02500 reject tcp from any to any { tcpflags syn,fin,ack,psh,rst,urg or tcpflags !syn,!fin,!ack,!psh,!rst,!urg } // DROP TCP antihack
02600 reject tcp from any to any not established tcpflags fin // DROP TCP antihack

02700 skipto 15000 in via lo0 // MOVE incoming LoopBack
02800 skipto 20000 out via lo0 // MOVE outgoing LoopBack
02900 skipto 25000 in via rl0 // MOVE incoming LanOut_1
03000 skipto 30000 out via rl0 // MOVE outgoing LanOut_1
03100 skipto 35000 in via rl1 // MOVE incoming LanOut_2
03200 skipto 40000 out via rl1 // MOVE outgoing LanOut_2
03300 skipto 45000 in via rl2 // MOVE incoming LanIn
03400 skipto 50000 out via rl2 // MOVE outgoing LanIn
03500 skipto 65534 // Drop any other packets

15000 count in // COUNT in lo0
15100 allow in // ALLOW in lo0

20000 count out // COUNT out lo0
20100 allow out // ALLOW out lo0

25000 count in // COUNT in IpOut_1
25100 skipto 65534 icmp from any to 255.255.255.255 in // DROP multicast ICMP in IpOut_1
25200 skipto 65534 not dst-ip IP_1 in // DROP not for IpOut_1
25300 skipto 65534 src-ip 127.0.0.0/8 in // DROP 127.0.0.0/8 in
25600 nat 4 dst-ip IP_1 in // NAT in IpOut_1
25700 allow tcp from any to IP_1 dst-port 53 in setup // PERMIT TCP to our services in IpOut_1
25800 allow udp from any to IP_1 dst-port 53,123 in keep-state // PERMIT UDP to our services in IpOut_1
25900 allow log logamount 1000 tcp from any to IP_1 dst-port 22 in setup // PERMIT in TCP to IpOut_1 ssh
26000 allow tcp from any to IP_1 in established // PERMIT in TCP established to IpOut_1
26100 allow dst-ip table(100) in // PERMIT in to clients
26200 allow icmp from any to IP_1 in keep-state // PERMIT ICMP to IpOut_1 in
26300 skipto 65534 in // DROP any other packets in

30000 count out // COUNT out IpOut_1
30100 skipto 65534 icmp from any to 255.255.255.255 out // DROP multicast ICMP out IpOut_1
30200 skipto 65534 dst-ip 127.0.0.0/8 out // DROP from 127.0.0.0/8
30500 nat global src-ip table(100) out // CHECK global NAT
30600 skipto 34000 src-ip IP_1 out // PERMIT from IpOut_1
30700 fwd GW_2 src-ip IP_2 // FWD IpOut_2
30800 nat 4 src-ip table(100) out // NAT clients
34000 allow src-ip IP_1 out keep-state // PERMIT from IpOut_1
34100 skipto 65534 out // DROP any other packets out

35000 count in // COUNT in IpOut_2
35100 skipto 65534 not dst-ip IP_2 in // DROP not for IpOut_2
35200 skipto 65534 icmp from any to 255.255.255.255 in // DROP multicast ICMP in IpOut_2
35300 skipto 65534 src-ip 127.0.0.0/8 in // DROP 127.0.0.0/8 in
35600 nat 5 dst-ip IP_2 in // NAT in IpOut_2
35700 allow tcp from any to IP_2 dst-port 53 in setup // PERMIT TCP to our services in IpOut_2
35800 allow udp from any to IP_2 dst-port 53,123 in keep-state // PERMIT UDP to our services in IpOut_2
35900 allow log logamount 1000 tcp from any to IP_2 dst-port 22 in setup // PERMIT in TCP to IpOut_2 ssh
36000 allow tcp from any to IP_2 in established // PERMIT in TCP established to IpOut_2
36100 allow dst-ip table(100) in // PERMIT in to clients
36200 allow icmp from any to IP_2 in keep-state // PERMIT ICMP to IpOut_2 in
36300 skipto 65534 in // DROP any other packets in

40000 count out // COUNT out IpOut_2
40100 skipto 65534 icmp from any to 255.255.255.255 out // DROP multicast ICMP out IpOut_2
40200 skipto 65534 dst-ip 127.0.0.0/8 out // DROP from 127.0.0.0/8
40500 nat global src-ip table(100) out // CHECK global NAT
40600 skipto 44000 src-ip IP_2 out // PERMIT from IpOut_2
40700 fwd GW_1 src-ip IP_1 // FWD IpOut_1
40800 nat 5 src-ip table(100) out // NAT clients
44000 allow src-ip IP_2 out keep-state // PERMIT from IpOut_2
44100 skipto 65534 out // DROP any other packets out

45000 count in // COUNT in
45100 skipto 65534 src-ip 127.0.0.0/8 in // DROP 127.0.0.0/8 in
45900 setfib 1 in // SETFIB 1
46000 allow in fib 1 // PERMIT fib 1
46100 allow in // PERMIT any in packets
46200 skipto 65534 in // DROP any in packets

50000 count out // COUNT out
50100 allow out // PERMIT out
50200 skipto 65534 out // DROP any out packets

65534 deny // DROP any packets


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

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

Непрочитанное сообщение harmless » 2013-07-11 15:02:54

lebus писал(а):harmless а nat config?

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

ipfw nat show config
ipfw nat 5 config if rl0 log same_ports unreg_only reset
ipfw nat 4 config if rl1 log same_ports unreg_only reset

lebus
рядовой
Сообщения: 11
Зарегистрирован: 2010-09-23 13:57:07

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

Непрочитанное сообщение lebus » 2013-07-31 10:17:30

Итак, вот что у меня получилось в результате:

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

#cat /etc/ipfw.rules
disable one_pass
nat 1 config log if em0 same_ports reset
nat 2 config log if em1 same_ports reset
nat 10 config redirect_port tcp 192.168.40.170:3389 192.168.10.55:3370 redirect_port tcp 192.168.40.170:3389 192.168.30.55:3370

table 1 flush

table 1 add 192.168.40.0/24 1

add 1100 skipto 5000 ip from any to any out

add nat 10 ip from any to me recv em0
add nat 10 ip from any to me recv em1

add nat 1 ip from any to me recv em0
add nat 2 ip from any to me recv em1

add 5000 nat global ip from 192.168.40.0/24 to not me

add nat tablearg ip from table(1) to not me out

add fwd 192.168.10.254 ip from 192.168.10.55 to any out
add fwd 192.168.30.50 ip from 192.168.30.55 to any out

add nat 1 ip from any to me recv em0 in
add nat 2 ip from any to me recv em1 in
В данном случае все ходят в инет через одного провайдера(не нужна мне балансировка). Снаружи всё доступно по любому внешнему IP.
Для резервирования канала пишется скрип, который меняет default route и содержимое table(1).

Спасибо всем.

В создании решения помогла также статья:
FreeBSD, ipfw nat и несколько провайдеров

kykolka
проходил мимо
Сообщения: 1
Зарегистрирован: 2013-08-12 15:51:03

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

Непрочитанное сообщение kykolka » 2013-08-12 15:53:10

Есть отличная подработка. Можно работать дома. Оплата свыше 250 руб. в час. Для всех. Место жительства значения не имеет. Официальный договор. Зарплата еженедельно. Пишите заявки на почту emailkontent@gmail.com