Страница 1 из 1

FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-05 22:13:33
lordlev
Доброго времени суток.

Прошу помочь победить избитое, но так и не побежденное мной.

Что есть:

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

shluz# uname -a
FreeBSD shluz 8.0-CURRENT FreeBSD 8.0-CURRENT #6: Thu Apr 16 13:29:41 MSD 2009  
2 ISP и локалка
Что надо :
Разделить трафик: часть сети должны идти в Инет через одного провайдера, часть через другого.
После долгого общения с search-инженерией и перепробования кучи вариантов, родилось что-то ... частично работающее, но не удовлетворяющее меня :(
И так, что получилось:
rl0 - 1.1.1.2 (1.1.1.1 gateway) 1 ISP
rl2 - 2.2.2.2 (2.2.2.1 gateway) 2 ISP
rl1 - 192.168.10.0/24 local
В rc.conf дефолтным стоит 1 ISP
Нат поднят так:

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

shluz# cat /etc/natd.conf
log
instance default
interface rl0
port 8668

instance rl2
interface rl2
port 8669
Правила ipfw получились такие:

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

shluz# ipfw list
00005 deny tcp from any to any dst-port 135
00006 deny tcp from any to any dst-port 137
00007 deny tcp from any to any dst-port 139 via rl0
00008 deny udp from any to any dst-port 135
00009 deny udp from any to any dst-port 137
00010 deny udp from any to any dst-port 139 via rl0
00011 deny tcp from any to any dst-port 445 via rl0
00012 deny udp from any to any dst-port 445 via rl0
00013 deny tcp from any to any dst-port 1433
00014 deny udp from any to any dst-port 1433
00020 deny tcp from any to any dst-port 25 via rl1
00050 fwd 1.1.1.1 ip from 1.1.1.2 to not 192.168.10.0/24
00051 fwd 2.2.2.1 ip from 2.2.2.1 to not 192.168.10.0/24
00060 deny ip from table(0) to me dst-port 22
00100 allow ip from any to any via lo0
00100 allow ip from any to any via lo0
00110 deny ip from any to 127.0.0.0/8
00120 deny ip from 127.0.0.0/8 to any
00130 divert 8669 ip from table(1) to any
00131 fwd 1.1.1.1 ip from 1.1.1.2 to any
00132 divert 8669 ip from any to 1.1.1.2
00133 divert 8668 ip from any to any
00134 fwd 2.2.2.1 ip from 2.2.2.2 to any
00135 divert 8668 ip from any to 2.2.2.2
00150 allow tcp from me to any setup keep-state
00155 allow udp from me to any keep-state
00156 allow ip from me to any
00157 allow ip from any to me
00160 allow icmp from any to any
00200 deny ip from any to 127.0.0.0/8
00254 allow ip from any to any via tun0
00255 allow gre from any to any
00256 allow udp from any to any dst-port 1194
00257 allow ip from 10.8.0.0/24 to 192.168.10.0/24 out via rl1
00258 allow ip from 192.168.10.0/24 to 10.8.0.0/24 out via rl1
00300 deny ip from 127.0.0.0/8 to any
01002 allow ip from 192.168.10.2 to any
01002 allow ip from any to 192.168.10.2
...............
65000 deny log logamount 10 ip from any to any
65535 deny ip from any to any
Так сейчас ходят в инет: по дефолту все идут через 1 ISP, а избранные из table (1) через 2 ISP.
Хорошо, но не хорошо. Нужно завести еще и squid transparent. А тут-то и не выходит каменный цветок .... После запуска сквида никто не может выйти ....
(В конфиге сквида прописал tcp_outgoing_address-а).
И еще - перестал работать openvpn на rl1. Вернее он работает, коннектится,но я не вижу локальную сеть.

Вывод - накосячил с правилами ipfw. Но где?

Не дайте дожить до конца света неудовлетворенным! Удовлетворите меня :D

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 10:08:44
lordlev
Добавлю еще своих "измышлизмов" :

Как я понимаю, после подключения по openvpn (10.8.0.0/24) не могу увидеть сетку из-за вот этого:

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

00050 fwd 1.1.1.1 ip from 1.1.1.2 to not 192.168.10.0/24
00051 fwd 2.2.2.1 ip from 2.2.2.1 to not 192.168.10.0/24
Тогда их надо переписать так :

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

00050 fwd 1.1.1.1 ip from 1.1.1.2 to not 192.168.10.0/24,10.8.0.0/24
00051 fwd 2.2.2.1 ip from 2.2.2.1 to not 192.168.10.0/24,10.8.0.0/24
Хотя достаточно и одного 50 правила, который дефаулт гетвей ...

Но, даже если и заработает, это не решит основную проблему - почему не хочет работать squid ......
:cz2:

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 14:42:02
lordlev
Хм .... перечитал .... Вроде все правильно и понятно объяснил ....
Или я настолько крут, что все правильно сделал? и нет косяка? Вот в это я не верю :)
А, забыл указать: в сквид перепрыгиваем по такому правилу

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

add 129 fwd 192.168.10.150,3128 log tcp from 192.168.10.16,192.168.10.30 to not me 80 via rl1
Видать как у Высоцкого - "Настоящих буйных мало" ... вот и не спешит никто помочь :)

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 14:45:42
sadchok
Попробуйте ROUTETABLES=2

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 15:10:11
lordlev
sadchok писал(а):Попробуйте ROUTETABLES=2
а потом через fib-ы? Да как-то не сложилось у меня с ними .... да еще ядро пересобирать ....
Как вариант, конечно, попробую ....
Но для начала понять-бы что правильно ... В смысле если с ipfw правилами все правильно, то тогда да, надо пробовать через фиб-ы, статику ....
Но тут кроме сквида еще и через опенвпн криво захожу:
по внутреннему (192.168.10.0/24 ) могу зайти только на шлюз. Все остальное недоступно с бесконечными ожиданиями ....
Вот из этого я и делаю вывод, что что-то c ipfw правилами.
Вот и смысл моей просьбы: если подтвердят, что правила правильные, то надо уходить на фиб-ы, статику ....
А если не правильно, то .... надо думать .... А думаю я уже неделю .... в рабочее время особо не дают разгуляться, приходится из дома по ссш .... ошибка в правиле и все, ждем утра, бежим на работу к консоли исправлять :-D

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 15:24:18
lordlev
только сейчас разглядел свою ошибку в копи\пасте:

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

00051 fwd 2.2.2.1 ip from 2.2.2.1 to not 192.168.10.0/24
конечно читать как

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

00051 fwd 2.2.2.1 ip from 2.2.2.2 to not 192.168.10.0/24

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 15:43:11
suspender
00258 allow ip from 192.168.10.0/24 to 10.8.0.0/24 out via rl1

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

00258 allow ip from 192.168.10.0/24 to 10.8.0.0/24 in via rl1
возможно починит доступность локалки для опен впн.
плюс я уверен, что опенвпн работает только на интерфейсе isp1, на айпишнег, соответствующий isp2 вы скорее всего удаленно подключиться не можете. (а с ipfw и не сможете).

Что со сквидом - хз.
В такой каше правил очень трудно разобраться. Особенно не зная деталей : one pass включен или выключен, как настроен сквид, собран ли он с опцией IPFW_TRANSPARENT, что в таблицах 1 и 0 и полного листинга ipfw правил. А также таблица маршрутизации.

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 17:34:57
sadchok
Пересобрать ядро.

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

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=50
options         IPFIREWALL_NAT
options         IPFIREWALL_FORWARD
options         IPDIVERT
options         LIBALIAS
options         ROUTETABLES=2
options         DUMMYNET
options         HZ="1000"
В /etc/rc.conf

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

setfib1_enable="YES"
setfib1_defaultroute="2.2.2.1"
squid_enable="YES"
squid_fib="1"

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

cat /usr/local/etc/rc.d/setfib1
#!/bin/sh
# PROVIDE: SETFIB1
# REQUIRE: NETWORKING
# BEFORE: DAEMON
#
# Add the following lines to /etc/rc.conf to enable setfib -1 at startup
# setfib1 (bool): Set to "NO" by default.
#                Set it to "YES" to enable setfib1
# setfib1_defaultroute (str): Set to "" by default
#       Set it to ip address of default gateway for use in fib 1

. /etc/rc.subr

name="setfib1"
rcvar=`set_rcvar`

load_rc_config $name

[ -z "$setfib1_enable" ] && setfib1_enable="NO"
[ -z "$setfib1_defaultroute" ] && setfib1_defaultroute=""

start_cmd="${name}_start"
stop_cmd="${name}_stop"

setfib1_start()
{
        if [ ${setfib1_defaultroute} ]
        then
          setfib 1 route add -net default ${setfib1_defaultroute}
        else
          echo "Can not set default route for fib 1 - setfib1_defaultroute is not assigned in rc.conf!"
        fi
}

setfib1_stop()
{
     setfib 1 route del -net default
}
run_rc_command "$1"
Ну и в ipfw подобие

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

setfib 1 ip from any to any via rl2
setfib 1 ip from 192.168.10.0/24 to any
setfib 1 ip from any to 192.168.10.0/24

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 18:03:34
sadchok

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-06 20:46:45
lordlev
suspender писал(а): возможно починит доступность локалки для опен впн.
Увы, но нет, не починило.
плюс я уверен, что опенвпн работает только на интерфейсе isp1, на айпишнег, соответствующий isp2 вы скорее всего удаленно подключиться не можете. (а с ipfw и не сможете).
Ага, это я знаю. Да и нет пока такой задачи.
В такой каше правил очень трудно разобраться.
Хм ... каша ... да, вроде не сильно так ....
и листинг полный ....
5-20 - рубим любимые дырки виндовых пакостей
50-51 - "обратка", что б ссш и т.п. отвечали в ту сеть откуда запрос пришел, а не по дефолту
60 - таблица(0) для bruteblock, блочить пытающихся подобрать пароль ссш
100-120 - ну понятно ...
130-135 - тут собака ... э ... я экзерцизмом занимаюсь, пытаюсь разделить трафик по обоим каналам
150-157 - разрешаем шлюзу свистеть во все стороны.
160 - разрешаем icmp ....
200-300 - ....ндя ... тут я что-то понакрутил ....да, каша какая-то получилась .... причем если оставить только 255, опенвпн продолжает коннектится ... да и вообще изменений не заметил .... странно .....
Вообще, изначально, тут должны были правила для опенвпн-а и мпд5 ....
начиная с 01002 - правила, разрешающие выпускать в инет клиентов. Осталось еще со времен UTM 4 ... сейчас его нет, а правила остались :)
и они повторяют 01002 с разницей в апишниках. Удобно с не сговорчивыми пользователями -ipfw delete и нет интернета :)
Особенно не зная деталей : one pass включен или выключен, как настроен сквид, собран ли он с опцией IPFW_TRANSPARENT, что в таблицах 1 и 0 и полного листинга ipfw правил. А также таблица маршрутизации.
Ну это-то не проблема:
net.inet.ip.fw.one_pass=1
в таблице 0 - айпишники пытающихся подобрать пароль к ссш
в таблице 1 - сейчас один айпишник (192.168.10.16) кого надо выпускать через 2 провайдера.
(ранее указанный с ним в паре для перехода в сквид 192.168.10.30 -это проверочный,которого надо пускать по дефолтному маршруту. Так сделал, что б не мешать остальным работать, пусть идут в обход сквида)
Упс ... а теперь проблема .... мои шаловливые ручки опять поломали ipfw-правила .... ссш - дисконект, опенвпн - дисконект .....мля ....
Сквид точно собран с транспарент, как-то ж он с 2009 висел прозрачно :)
выводы netstat -rn и squid -v завтра покажу.... да и конфиг сквида могу ... но, как мне кажется, на данном этапе дело не в этом ....
sadchok писал(а):Пересобрать ядро.
Спасибо. Но не сейчас. На не очень далекое будущее стоит в планах перейти вообще на 9-ку с pf, но ... сейчас, в конце года затевать такое .... бухи меня повесят на витой паре :)
А это я как-то и не заметил .... Спасибо.

Проблема так и осталась на месте ......

Re: FreeBSD,2 ISP, ipwf,nat и роутинг

Добавлено: 2012-12-07 9:50:27
lordlev
И так, вот обещанное:

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

shluz# netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            212.233.120.129    UGS         0   251926    rl0
10.8.0.0/30        10.8.0.2           UGS         0        0   tun0 =>
10.8.0.0/24        10.8.0.2           UGS         0        0   tun0
10.8.0.2           link#6             UH          0        0   tun0
127.0.0.1          link#5             UH          0      100    lo0
192.168.10.0/24    link#2             U           0   309496    rl1
195.95.214.160/29  link#3             U           0    16694    rl2
212.233.120.128/30 link#1             U           0   118994    rl0
route add с 195.95.214.160/29 не добавлял. Это, вроде как, делаем через ipfw. Или надо?

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

shluz# shluz# squid -v
Squid Cache: Version 3.0.STABLE26
configure options:  '--with-default-user=squid' '--bindir=/usr/local/sbin' '--sbindir=/usr/local/sbin' '--datadir=/usr/local/etc/squid' '--libexecdir=/usr/local/libexec/squid' '--localstatedir=/var/squid' '--sysconfdir=/usr/local/etc/squid' '--enable-removal-policies=lru heap' '--disable-linux-netfilter' '--disable-linux-tproxy' '--disable-epoll' '--enable-auth=basic digest negotiate ntlm' '--enable-basic-auth-helpers=DB NCSA PAM MSNT SMB squid_radius_auth YP' '--enable-digest-auth-helpers=password' '--enable-external-acl-helpers=ip_user session unix_group wbinfo_group' '--enable-ntlm-auth-helpers=SMB' '--enable-negotiate-auth-helpers=squid_kerb_auth' '--enable-storeio=ufs diskd null' '--enable-ssl' '--with-openssl=/usr' '--enable-ipfw-transparent' '--enable-kqueue' '--enable-err-languages=Armenian Azerbaijani Bulgarian Catalan Czech Danish  Dutch English Estonian Finnish French German Greek  Hebrew Hungarian Italian Japanese Korean Lithuanian  Polish Portuguese Romanian Russian-1251 Russian-koi8-r  Serbian Simplify_Chinese Slovak Spanish Swedish  Traditional_Chinese Turkish Ukrainian-1251  Ukrainian-koi8-u Ukrainian-utf8' '--enable-default-err-language=templates' '--prefix=/usr/local' '--mandir=/usr/local/man' '--infodir=/usr/local/info/' '--build=i386-portbld-freebsd8.0' 'build_alias=i386-portbld-freebsd8.0' 'CC=cc' 'CFLAGS=-O2 -pipe -I/usr/include -fno-strict-aliasing' 'LDFLAGS= -rpath=/usr/lib:/usr/local/lib -L/usr/lib' 'CPPFLAGS=' 'CXX=c++' 'CXXFLAGS=-O2 -pipe -I/usr/include -fno-strict-aliasing' 'CPP=cpp'
Конфиг сквида :

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

shluz# cat ./squid.conf | grep -v '^#'
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl stat proto cache_object
acl localnet src 192.168.10.0/24	# RFC1918 possible internal network
acl manager src "/usr/local/etc/squid/manager.txt"
acl manager_time_work time MTWH 12:00-17:30
acl manager_time_lost time FAS 11:00-18:30
acl unlim src "/usr/local/etc/squid/unlim.txt"
acl sitemail dstdom_regex mail passport.yandex.ru mail.rambler.ru mamba
acl methodpost method POST
acl free dstdom_regex avast.com ntp.psn.ru ru.pool.ntp.org
acl file_no url_regex com$ msi$ mp3$ avi$ wav$ mpg$ game$ zip$ rar$
acl webserver src 192.168.10.150/255.255.255.255
acl nelzya dstdom_regex sdmc.devicevm.com

acl ag src 192.168.10.30
acl tranzitek src 192.168.10.16

acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl CONNECT method CONNECT
acl FTP proto FTP
acl tsouz dstdom_regex tsouz
always_direct allow FTP
always_direct allow SSL_Ports
always_direct allow tsouz
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny unlim nelzya
http_access allow unlim webserver
http_access allow stat webserver
http_access deny manager sitemail
http_access deny manager methodpost sitemail
http_access allow manager manager_time_lost
http_access allow manager manager_time_work
http_access allow SSL_ports
http_access allow unlim
http_access deny manager
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 192.168.10.150:3128 transparent

tcp_outgoing_address 212.233.120.130 ag
tcp_outgoing_address 195.214.165 tranzitek
tcp_outgoing_address 212.233.120.130

hierarchy_stoplist cgi-bin ?
cache_mem 23 MB
maximum_object_size_in_memory 1024 KB
cache_dir ufs /usr/local/squid/cache 10240 16 256
maximum_object_size 10240 KB
cache_swap_low 90
cache_swap_high 95
access_log /usr/local/squid/logs/access.log squid
cache_log /usr/local/squid/logs/cache.log
сache_store_log /usr/local/squid/logs/store.log
pid_filename /usr/local/squid/logs/squid.pid
url_rewrite_program /usr/local/rejik/redirector /usr/local/rejik/redirector.conf
url_rewrite_children 20
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern (cgi-bin|\?)	0	0%	0
refresh_pattern .		0	80%	14400
refresh_pattern \.bz2$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.exe$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.gif$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.gz$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.ico$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.jpg$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.mid$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.mp3$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.pdf$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.swf$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.tar$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.tgz$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern \.zip$	43200	100%	43200 ignore-reload ignore-no-cache
refresh_pattern http://ad\.                        43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern http://ads\.                       43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern http://adv\.                       43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern http://click\.                     43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern http://count\.                     43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern http://counter\.                   43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern http://engine\.                    43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern http://img\.readme\.ru             43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern http://userpic\.livejournal\.com   43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern \.ru/bf-analyze                    43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern \.ru/bf-si                         43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern /advs/                             43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern /banners/                          43200   100%    43200 ignore-reload ignore-no-cache
refresh_pattern /cgi-bin/iframe/                   43200   100%    43200 ignore-reload ignore-no-cache
visible_hostname 192.168.10.150
server_persistent_connections off
error_directory /usr/local/etc/squid/errors/Russian-koi8-r
deny_info http://192.168.10.150/manager_time.htm manager
deny_info http://192.168.10.150/ban/access_denied.html sitemail
reload_into_ims on
coredump_dir /usr/local/squid/cache