Форум русской поддержки ОС Fedora linux
Fedora 12 RFRemix
есть сервер работающий в качесте шлюза 3 сетевухи
eth0 1 провайдер получаем адрес по dhcp
eth1 2 провайдер резервный
eth2 локалка
selinux и network manager выключены
маскарад включен на eth0 и eth1, включал через system-config-firewall-tui
после перезагрузки интернет раздается с eth0 нормально
нужно сделать автоматическое переключение, между провайдерами
как я понял нужно менять шлюзы
менял шлюзы так (иенял и через route del default и route add)
ip route change default via 10.36.204.1 dev eth0
ip route change default via 192.168.41.17 dev eth1
при смене шлюза (ip route change default via 192.168.41.17 dev eth1)
первые секунды прям быстро работает, потом
жутко тормозит, но как-то проскакивает интернет
при этом нет запросов из локалки, но сайты как-то иногда открываются причем 2ip правильно показывает нового провайдера
tcpdump -i eth2
48 packets captured
7837 packets received by filter
7759 packets dropped by kernel
обратная сменя шлюза (ip route change default via 10.36.204.1 dev eth0)
работает нормально
tcpdump -i eth2
19730 packets captured
19732 packets received by filter
0 packets dropped by kernel
[root@fedora ~]# ifconfig
eth0 Link encap:Ethernet inet addr:10.36.204.73 Bcast:10.36.207.255 Mask:255.255.252.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:70829 errors:0 dropped:0 overruns:0 frame:0 TX packets:45494 errors:0 dropped:0 overruns:0 carrier:2 collisions:0 txqueuelen:1000 RX bytes:91775179 (87.5 MiB) TX bytes:4638068 (4.4 MiB) Interrupt:27 eth1 Link encap:Ethernet inet addr:192.168.41.18 Bcast:192.168.41.23 Mask:255.255.255.248 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12481 errors:0 dropped:0 overruns:0 frame:0 TX packets:15737 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:11125684 (10.6 MiB) TX bytes:2293422 (2.1 MiB) Interrupt:16 Base address:0xcc00 eth2 Link encap:Ethernet inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:62467 errors:0 dropped:0 overruns:0 frame:0 TX packets:80064 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:7298018 (6.9 MiB) TX bytes:103073856 (98.2 MiB) Interrupt:19
[root@fedora ~]# route
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.41.16 * 255.255.255.248 U 0 0 0 eth1 192.168.1.0 * 255.255.255.0 U 0 0 0 eth2 10.36.204.0 * 255.255.252.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1002 0 0 eth1 link-local * 255.255.0.0 U 1003 0 0 eth0 link-local * 255.255.0.0 U 1004 0 0 eth2 default 192.168.41.17 0.0.0.0 UG 0 0 0 eth1
[root@fedora ~]# cat /etc/sysctl.conf
# Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # Controls IP packet forwarding net.ipv4.ip_forward = 1 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 0 # Controls the System Request debugging functionality of the kernel kernel.sysrq = 0 # Controls whether core dumps will append the PID to the core filename. # Useful for debugging multi-threaded applications. kernel.core_uses_pid = 1 # Disable netfilter on bridges. net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
[root@fedora network-scripts]# cat ifcfg-eth0
DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet IPV6INIT=no USERCTL=no #DNS1=8.8.8.8 #DNS2=192.168.1.254
[root@fedora network-scripts]# cat ifcfg-eth1
DEVICE=eth1 ONBOOT=yes BOOTPROTO=none TYPE=Ethernet IPV6INIT=no USERCTL=no IPADDR=192.168.41.18 NETMASK=255.255.255.248 #GATEWAY=192.168.41.17 #DNS2=8.8.8.8
[root@fedora network-scripts]# cat ifcfg-eth2
DEVICE=eth2 HWADDR=1c:af:f7:7c:c3:54 ONBOOT=yes IPADDR=192.168.1.1 BOOTPROTO=none NETMASK=255.255.255.0 TYPE=Ethernet IPV6INIT=no USERCTL=no
как сделать чтобы dhcliemt не тер мои днс в /etc/resolv.conf
Отредактированно trunk (2011-01-18 00:03:54)
Неактивен
trunk написал:
как сделать чтобы dhcliemt не тер мои днс в /etc/resolv.conf
элементарно, выстави права на файл для всех только для чтения
а роутингу по дефолту присвоить метрику, если один пропадает поднимается второй
типо:
route add default dev eth1 metric 1
route add default dev eth0 metric 2
Но всегда ли отсутствие канала характеризуется физическим опусканием интерфейса, как раз таки нет значит и не всегда будет работать, надо это делать с помощью скрипта, пингуем какой нибуть ip, пинг прорал, меняем маршрут.
тут можно почитать(есть на русском но искать не охота)
http://routeskeeper.sourceforge.net/Rou … Linux.html
Отредактированно dik-m (2011-01-22 21:06:41)
Неактивен
dik-m написал:
trunk написал:
как сделать чтобы dhcliemt не тер мои днс в /etc/resolv.conf
элементарно, выстави права на файл для всех только для чтения
это костыль, где-то должен лежать конфиг для dhcp и там надо прописывать не получать dns только хз где это в федоре и как он должен выглядеть
метрику никогда не пробовал
1 провайдер халявный
2 за каждый мегабайт
если первый упадет, а после подымется трафик пойдет как надо по маршруту с наименьшей метрикой и как это линух определит, появился ли коннект?
нашел вроде похожий случай
"iptables: Внутренние отличия SNAT и MASQUERADE?"
http://www.linux.org.ru/forum/admin/1316932
как я понял маскарад не нужен в моем случае нужно включить SNAT, то как это правильно сделать (с iptables пока разбираюсь, очень он замудренный)
SNAT для 2 ух интерфейсов?
Отредактированно trunk (2011-01-25 19:29:51)
Неактивен
trunk написал:
это костыль, где-то должен лежать конфиг для dhcp и там надо прописывать не получать dns только хз где это в федоре и как он
Это, у тебя гном, нетворк-манагер есть, там выставленно "Автоматически(DHCP)" выстави Автоматически(DHCP только адрес) тогда DNS прописываться не будед, да и маршруты тоже не будут прописываться.
а по поводу остольного я бы порекомендовал написать скрипт типа такого:
нам серв в интернете, а если трафик платный то лучше использовать DNS прова(если он не тарифицируемый, должды быть, спроси у прова), хотя проверять будем на халявном трафике
предположим TEST_IP это некий серв в интернете
eth0 — первый интернет (халявный)
eth1 — второ интернет (тарифицируемый)
#!/bin/sh # будем использовать автомаршрутизацию? yes или no auto_route=yes # задаём тестовый ip TEST_IP=8.8.8.8 # зацикливаем проверку while [ "$auto_route" = "yes" ] do # проверяем есть ли пинг до сервера $TEST_IP через интерфейс eth0 if [ -n "`ping -c 1 -I eth0 $TEST_IP|grep 'icmp_req'`" ]; then # если пинг есть то функция продолжается # проверяем какие у нас маршруты, если не правильные то исправляем их, # и пускаем трафик через халявный интернет if [ "`ip r|grep default|awk '{print $3}'`" != "eth0" ]; then route del default route add default dev eth0 fi else # если же пинга нет проверяем какие у нас маршруты, если не правильные то исправляем их, # и пускаем трафик через тарифицируемый интернет if [ "`ip r|grep default|awk '{print $3}'`" != "eth1" ]; then route del default route add default dev eth1 fi fi # ждем 5 минут и идем на следующий круг :) sleep 5m done
ну вот чтото вроде этого(могу где-то накосячить, накидал что первое в голову пришло).
проверка раз в 5 минут и если нет ответа изменяем маршрут
Отредактированно dik-m (2011-01-25 22:39:35)
Неактивен