помогите разобраться...
Есть сервачек FreeBSD4.8
настроена диалапная связь 115kbit/s (tun0) - [хороший канал, но иногда падает, когда провайдеры чето там у себя ломают].
Есть второй модем 56kbit/s который должен фонить к другому провайдеру на случай, когда первый провайдер чето там ломает (желательно это автоматически).
...как в песне Миронова - крокодил не ловится, не растет кокос... неделю по инету шерстю...
Описание конфигурации:
---
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options ICMP_BANDLIM
options IPDIVERT
options HZ=1000
options DUMMYNET
---
net.inet.ip.fw.one_pass=0
---
gateway_enable="YES"
hostname="saturn.sirius.com"
network_interfaces="lo0 rl0 tun0"
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig_tun0=
firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic -s -u -p 8668"
named_enable="YES"
named_flags="-b /etc/namedb/named.boot"
kern_securelevel_enable="NO"
linux_enable="YES"
sshd_enable="YES"
---ppp.conf:
default:
add default HISADDR
saturn: <-- это рабочая коннекция
set device /dev/cuaa1
set speed 115200
set phone "0|1:2|3"
enable dns
set authname saturn
set authkey 111
set redial 5 333
set reconnect 5 9999
---
#!/bin/sh
ipfw='/sbin/ipfw -q'
ournet='192.168.0.1/24'
uprefix='192.168.0'
iftun='tun*'
ifrl='rl0'
${ipfw} add 201 allow ip from ${uprefix}.3 to any via ${ifrl}
${ipfw} add 201 allow ip from any to ${uprefix}.3 via ${ifrl}
...и т.д. на кучу сетевых машин...
${ipfw} add 2400 pipe 1 ip from any to any out xmit ${iftun}
${ipfw} add 2401 pipe 2 ip from any to any in recv ${iftun}
${ipfw} pipe 1 config bw 115Kbit/s #${iftun}
${ipfw} pipe 2 config bw 115Kbit/s #${iftun}
${ipfw} queue 10 config pipe 1 weight 15 #mask src-ip 0xffffffff
${ipfw} queue 11 config pipe 2 weight 15 #mask dst-ip 0xffffffff
${ipfw} queue 20 config pipe 1 weight 35 #mask src-ip 0xffffffff
${ipfw} queue 21 config pipe 2 weight 35 #mask dst-ip 0xffffffff
${ipfw} queue 30 config pipe 1 weight 50 #mask src-ip 0xffffffff
${ipfw} queue 31 config pipe 2 weight 50 #mask dst-ip 0xffffffff
# inside BEGIN
${ipfw} add 2410 queue 10 ip from ${uprefix}.3 to any out recv ${ifrl} xmit ${iftun}
...и т.д. ...
${ipfw} add 2459 queue 30 ip from ${uprefix}.99 to any out recv ${ifrl} xmit ${iftun}
# inside END
${ipfw} add 2500 divert 8668 ip from any to any via ${iftun}
# outside BEGIN
${ipfw} add 2510 queue 11 ip from any to ${uprefix}.3 in recv ${iftun}
...и т.д. ...
${ipfw} add 2559 queue 31 ip from any to ${uprefix}.99 in recv ${iftun}
# outside END
${ipfw} add 3000 reset log tcp from any to any 113 in recv ${iftun}
${ipfw} add 3010 allow icmp from any to any icmptypes 0,3,8,11,12,13,14
${ipfw} add 3050 allow udp from any to any 53 out xmit ${iftun}
${ipfw} add 3060 allow udp from any 53 to any in recv ${iftun}
${ipfw} add 3100 allow tcp from any to any out xmit ${iftun} setup
${ipfw} add 3110 allow tcp from any to any via ${iftun} established
${ipfw} add 3200 allow tcp from any to any 80 setup
${ipfw} add 3210 allow tcp from any to any 22 setup
${ipfw} add 4000 allow ip from any to any via lo0
${ipfw} add 65435 deny log ip from any to any
---
и все работает с сумасшедшей скоростью. НО как чтото ломают провидеры - на час на два инет не существует :( и все юзеры в конторе начинают потихоньку подвывать. Это бывает не часто, но все-же...
Как скрипт для cron сделать чтоб давал [ ping -S (192.168.2.10 - постоянный IP модема tun0) 195.10.10.10 - IP подальше провидера ] и при неудаче фонил бы другой модем к другому провидеру. Таким же образом проверять через минуту - поднялся ли первый провидер и отрубать второй модем.
Самое главное - правила фиревола или роутинга - какие команды надо давать, или что настроить чтобы сеть не страдала от отсутствия инета?
...где рыть надо???
Буду признателен за любой намек в сторону решения этой проблемы.
|