user@andygol:~$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth1169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth1192.168.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
user@andygol:~$ sudo traceroute almaz.gts.dp.uatraceroute to almaz.gts.dp.ua (91.193.69.5), 30 hops max, 60 byte packets 1 188.247.114.158 (188.247.114.158) 1.968 ms 2.070 ms 2.333 ms 2 ametist.gts.dp.ua (91.193.69.5) 2.398 ms 2.414 ms 2.425 ms
user@andygol:~$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 212.115.225.50 0.0.0.0 UG 0 0 0 ppp0169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth1192.168.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1212.115.225.50 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
user@andygol:~$ sudo traceroute almaz.gts.dp.uatraceroute to almaz.gts.dp.ua (91.193.69.5), 30 hops max, 60 byte packets 1 nas-kmn-03.fregat.net (212.115.225.50) 0.189 ms 0.249 ms 0.332 ms 2 vl33.10GE.backbone.fregat.net (212.115.225.1) 0.940 ms 0.942 ms 1.164 ms 3 193.111.83.130 (193.111.83.130) 1.284 ms 1.276 ms 1.252 ms 4 91.193.68.250 (91.193.68.250) 3.140 ms 3.714 ms 4.839 ms 5 ametist.gts.dp.ua (91.193.69.5) 0.778 ms 0.756 ms 0.738 ms
Проблема 1 полягає в тому, щоб налаштувати маршрутизацію таким чином щоб пакети які призначаються для ISP 1 доходили безпосередньо до нього, а не через шлюз ISP 2, тобто налаштувати маршрутизацію окремо для кожного з провайдерів!Проблема 2, як задіяти обидва інтерфейси eth0 та eth1 на «Linux Box» для одночасної роботи? Про bounding мені вже говорили. На мою думку треба спочатку вирішити Проблему 1, а Проблема 2 вже повинна розв’язатись легко, чи я не правий?
Вам потрібно дві таблиці маршрутизації, кожна з таблиць повинна мати свій default gw на окремий інтерфейс, потім правило для маршрутизації трафіку через ту чи іншу таблицю, і правило щоб вихідний трафік йшов через той самий інтерфейс через який прийшов.Вам потрібно оце: http://lartc.org/howto/lartc.rpdb.multiple-links.html( http://www.odmin4eg.ru/2011/486/)
2. що значить для одночасної роботи ? Якщо ви хочете різний тип трафіку ганяти через різних провайдерів (торенти ISP1, все решта через ISP2) то бондінг вам не підходить.
________ +------------+ / | | | +-------------+ Provider 1 +------- __ | | | / ___/ \_ +------+-------+ +------------+ | _/ \__ | if1 | / / \ | | || Local network -----+ Linux router | | Internet \_ __/ | | | \__ __/ | if2 | \ \___/ +------+-------+ +------------+ | | | | \ +-------------+ Provider 2 +------- | | | +------------+ \________По перше, як маршрутизувати відповіді на пакети, що надійшли від певного провайдера, скажімо від Провайдера 1, назад знову ж таки до відповідного провайдера.Давайте з початку встановимо кілька символічних назв. Нехай $IF1 — назва першого інтерфейсу (на малюнку if1), а $IF2 — назва іншого інтерфейсу. Потім, $IP1 буде IP-адресою пов’язаною з $IF1, а $IP2 — IP-адреса пов’язана з $IF2. Далі, $GW1 — IP-адреса шлюзу Провайдера 1, а $GW2 — IP-адреса шлюзу Провайдера 2. І на останнє, $P1_NET — мережа до якої належить шлюз $GW1, а$P2_NET — мережа до якої належить шлюз $GW2.Тепер додамо дві таблиці маршрутизації T1 та T2 до /etc/iproute2/rt_tables. Тепер задамо маршрутизацію для цих таблиць ip route add $P1_NET dev $IF1 src $IP1 table T1 ip route add default via $GW1 table T1 ip route add $P2_NET dev $IF2 src $IP2 table T2 ip route add default via $GW2 table T2Нічого незвичайного, просто побудуйте маршрут до шлюзу та вкажіть типовий маршрут через цей шлюз, так само як ви могли б це зробити у випадку одного провайдера, але з розміщенням маршрутів в окремих таблицях для кожного провайдера. Зверніть увагу, що мережевого маршруту достатньо для того, щоб знайти будь-який хост у мережі, що містить цей шлюз, як зазначено вище.Далі треба створити головну таблицю маршрутизації. Це буде гарною ідеєю направити трафік безпосередньо до сусідній хостів через інтерфейс, до якого вони під’єднанні. Зауважте, що аргумент `src' надає можливість переконатись, що обрано правильну вихідну IP-адресу. ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2Потім ваші налаштування для типової маршрутизації ip route add default via $GW1Далі потрібно задати правила маршрутизації. З їх допомогою буде обиратись відповідна таблиця маршрутизації. Ви потрібні переконатись, що ваші маршрути йдуть через вказаний інтерфейс, якщо ви вже маєте відповідні сирцеві адреси: ip rule add from $IP1 table T1 ip rule add from $IP2 table T2Цей набір команд гарантує, що всі відповіді на трафік, що поступає певний на інтерфейс був отриманий у відповідь на запит з цього інтерфейсу.
ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
$ route -n | grep 'UG[ \t]' | awk '{print $2}'$ ip route list | awk ' /^default/ {print $3}'$ netstat -rn |awk '{if($1=="0.0.0.0") print $2}'$ netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }'$ ip r | awk '/^def/{print $3}'
Як отримати дані, що надсилаються через DHCP? В них повинно бути все: й IP-адреса, адреса та маска мережі, адреса шлюзу, адреси DNS-серверів.
user@andygol:~$ cat /var/lib/dhcp/dhclient.leases lease { interface "eth1"; fixed-address 192.168.2.100; option subnet-mask 255.255.255.0; option dhcp-lease-time 315360000; option routers 192.168.2.1; option dhcp-message-type 5; option dhcp-server-identifier 192.168.2.1; option domain-name-servers 91.193.69.4,91.193.68.22; option domain-name "andyhome"; renew 4 2016/07/14 00:09:31; rebind 6 2021/01/30 03:23:03; expire 0 2022/05/01 09:23:03;}lease { interface "eth1"; fixed-address 192.168.2.100; option subnet-mask 255.255.255.0; option dhcp-lease-time 315360000; option routers 192.168.2.1; option dhcp-message-type 5; option dhcp-server-identifier 192.168.2.1; option domain-name-servers 91.193.69.4,91.193.68.22; option domain-name "andyhome"; renew 4 2012/05/03 09:39:06; rebind 4 2012/05/03 09:39:06; expire 4 2012/05/03 09:39:06;}
function get_net() {ip=$1mask=$2for ((i=1;$i<5;i++))doip_=$(echo $ip|cut -d. -f$i)mask_=$(echo $mask|cut -d. -f$i)sb[$i]=$(($ip_&$mask_))doneecho ${sb[1]}.${sb[2]}.${sb[3]}.${sb[4]}}