У меня вопрос такой. Имею домашнюю сеть:
dsl-модем выходящий в интернет
ноут
комп
и еще сервер на debian 5.0.3 (является сервером баз данных через интернет)
на Дебиане имеется 2 сетевых карты.
Возникла проблема что интернет получаемый через ДСЛ-модем стал нестабилен. Поэтому параллельно подключился к другому провайдеру домашних сетей с выходом в интернет через vpn.
В домашней сети статика (далее сеть 1), в сети кабельного провайдера (далее сеть 2) - dhcp
Вот настройки сетевых карт на Дебиане
[console]
debian:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:04:61:4b:5e:b4
inet addr:10.4.164.251 Bcast:10.4.164.255 Mask:255.255.255.128
inet6 addr: fe80::204:61ff:fe4b:5eb4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:349 errors:0 dropped:0 overruns:0 frame:0
TX packets:626 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:154995 (151.3 KiB) TX bytes:59018 (57.6 KiB)
Interrupt:22 Base address:0xa000
eth1 Link encap:Ethernet HWaddr 00:04:61:4b:5e:83
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::204:61ff:fe4b:5e83/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5129 errors:0 dropped:0 overruns:0 frame:0
TX packets:5555 errors:0 dropped:0 overruns:1 carrier:0
collisions:0 txqueuelen:1000
RX bytes:628799 (614.0 KiB) TX bytes:865041 (844.7 KiB)
Interrupt:19 Base address:0x9000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2438 errors:0 dropped:0 overruns:0 frame:0
TX packets:2438 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:343128 (335.0 KiB) TX bytes:343128 (335.0 KiB)
[/console]
если выполнить route показывает
[console]
debian:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.10.10 10.4.164.254 255.255.255.255 UGH 0 0 0 eth0
10.4.164.128 * 255.255.255.128 U 0 0 0 eth0
localnet * 255.255.255.0 U 0 0 0 eth1
10.0.12.0 10.4.164.254 255.255.255.0 UG 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth1
[/console]
сеть 1 подключена к eth1, сеть 2 к eth0
в сети 2 есть внутренние ресурсы 10.0.12.2 которые с дебиана видятся прекрасно.
Вопрос: что мне надо сделать чтобы я из сети 1 видел например тот же самый 10.0.12.2?
Для того чтобы проходила внутренняя маршрутизация я сделал команду
[console]
debian:~# echo 1 > /proc/sys/net/ipv4/ip_forward
[/console]
и перегрузил сервер и при команде
[console]
debian:~# cat /proc/sys/net/ipv4/ip_forward
1
[/console]
показывает "1". я так понимаю что внутренняя маршрутизация включена, однако из сети 1 я не могу пропинговать ни 10.0.12.2 ни даже адрес дебиана в сети 2 - 10.4.164.251
Что еще и куда надо прописать чтобы все заработало?
И вопрос 2.
В связи с тем что как я уже писал есть необходимость во второй линии интернета, как сделать так чтобы соединение с интернетом было через сеть 2 резервным? Т.е. чтобы весь трафик с сервера шел через дсл-модем, а в случае когда он не работает через vpn-шлюз сети2.
Настройка "плавающей" статической маршрутизации
nano /home/nat #вписываем туда
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#Маскардинг в локалку
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Сохраняем!
Назначаем права
chmod +x /home/nat
Если всё норм в пишем в автозагрузки nano /etc/rc.local перед exit 0
/home/nat
На счёт 2 вопроса пока сам бьюсь.
Это балансировка это мелочь.
нашол можно по извращаться над скриптом)
сохранить скрипт и засунуть в cron
#!/bin/bash
if ping -q -c 2 google.com; then
echo "ping OK"
else
echo "ping BAD"
fi
например переделать так
#!/bin/bash
if ping -q -c 2 google.com; then
echo "ping OK"
poff inet
else
echo "ping BAD"
pon inet
fi
Ну можно доработать. smile всё зависит от задачи.
ток например до google жестоко маршрут прописать через adsl
со скриптом я уже возился, только он проверяет доступность сервака из сети пингованием самого себя и если этого не происходит - перегружает дсл-модем
#!/bin/sh
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
LOGFILE="/srv/ftp/log/csserver.log"
case "$1" in
*)
dt=`date`
routes=`route -n|grep ^0\.0\.0\.0|awk '{print $2}' | grep -ic "."`;
if [ "$routes" = "2" ]; then
echo "$dt : delete transtelecom default route" >>"$LOGFILE"
route del default dev eth0
fi
ipaddr=`ping -c 1 -q mydomain.dyndns.tv | sed '3,6d' | sed -e 's/).*//' | sed -e 's/.*(//'`;
decade=`echo "$ipaddr" | sed -e 's/\..*//'`;
if [ "$decade" = "192" -o "$decade" = "172" -o "$decade" = "10" -o "$decade" = "" ]; then
echo "$dt : restart DSL (ip address not delegated - $ipaddr)" >>"$LOGFILE"
wget -v -F -S --http-user=login --http-password=pass --ignore-length --referer="http://login:pass@192.168.1.1/maintenance/tools_system.htm" "http://login:pass@192.168.1.1/Forms/tools_system_1" -O "/srv/ftp/log/rbtdsl.info"
fi
;;
esac
exit 0
закинул его вызов в крон раз в 5 минут, но это не совсем тот путь который нужен, потому как если дсл-интернет умрет и через 5 минут (в самом худшем случае) только поднимется второй интернет через vpn это не есть хорошо
Попробовал сделать так как писали:
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#Маскардинг в локалку
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
скрипт выполнился, но при попытке пинговать из сети 1 сеть 2 ничего не происходит (Превышен интервал ожидания для запроса). Это же пишет даже при попытке пинговать второй айпишник дебиана 10.4.164.251 из сети 192.168.1.0/24 а конкретнее с ноутбука с адресом 192.168.1.4
В чем может быть засада?