Fedora linux forum

Форум русской поддержки ОС Fedora linux

 
  • Список
  •  » Сеть
  •  » 2 интернет канала и переключение между ними

#1 2011-01-17 23:30:37

trunk
New member
Зарегистрирован: 2011-01-17
Сообщений: 2

2 интернет канала и переключение между ними

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)

Неактивен

 

#2 2011-01-22 20:37:02

dik-m
Member
Зарегистрирован: 2009-10-28
Сообщений: 85

Re: 2 интернет канала и переключение между ними

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)

Неактивен

 

#3 2011-01-25 19:26:59

trunk
New member
Зарегистрирован: 2011-01-17
Сообщений: 2

Re: 2 интернет канала и переключение между ними

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)

Неактивен

 

#4 2011-01-25 22:35:41

dik-m
Member
Зарегистрирован: 2009-10-28
Сообщений: 85

Re: 2 интернет канала и переключение между ними

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)

Неактивен

 
  • Список
  •  » Сеть
  •  » 2 интернет канала и переключение между ними