Приветствую,Имею в наследство такую конфигурацию:
Fedora 6, 2.6.22.14-72.fc6
eth1 - в провайдера №1, имеет внешний IP
eth1.100 - влан внутри провайдера №1 для связи между объектами (радио между зданиями)
eth0 - локальная сеть
eth0:1 - алиас для vpn (pptpd)ADSL'ный модем воткнут в eth0 и настроен роутером для доступа к провайдеру №2. В настройках Федора установлена как DMZ.
По-мелочам: в мир с двух айпишников "смотрят" почтовые порты через DNAT, прозрачный сквид для сотрудников, шифрованный впн, nat. Почтовики и всякая дрянь доступна через eth0 и/или через eth0:1
Оно почти работает :)
Т.е. я не могу получать входящие соединения (например, VPN) по двум каналам одновременно.
Постоянно испытываю проблемы в случаи падения одного из каналов - приходится руками скрипты запускать и в GUI править default gateway. Мало того, получаю десятки звонков в стиле "на какой айпи коннектиться?".Много чего прочитал на opennet.ru и вот варианты, который удалось найти:
1. коннект с двух каналов возможен, но из PPP недоступен интернет.
2. всё отлично, но только по одному из выбранных каналов.Вариант с iptables ROUTE не подходит, ядро пересобирать боюсь :/
iptables v1.3.8Хотелось бы услышать мнение посетителей насчет этого "роутера" и, возможно, полезные советы. Спасибо.
Вам нужно юзать "Маршрутизацию по источнику".
Два канала в Internet, Синн Хердеюрген - http://www.osp.ru/lan/2002/05/136078/
Никаких дефолт гетвеев. Реализуется средствами ip route2. В федоре он возможно уже есть, если нет - установите этот пакет. Статья для ядер 2.2. В вашем ядре 2.4 или 2.6 поддержка
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
возможно тоже уже есть, проверьте. Если нет, то без генерации ядра не обойтись. Бояться нечего, старое ядро вы сохраните и можете указать в GRUB, или что-то там у вас, мультизагрузку с выбором ядра. Можете проделать это всё на полигоне, затем на реальной машине.
>[оверквотинг удален]
>Никаких дефолт гетвеев. Реализуется средствами ip route2. В федоре он возможно уже
>есть, если нет - установите этот пакет. Статья для ядер
>2.2. В вашем ядре 2.4 или 2.6 поддержка
>CONFIG_IP_ADVANCED_ROUTER=y
>CONFIG_IP_MULTIPLE_TABLES=y
>CONFIG_IP_ROUTE_MULTIPATH=y
>возможно тоже уже есть, проверьте. Если нет, то без генерации ядра не
>обойтись. Бояться нечего, старое ядро вы сохраните и можете указать в
>GRUB, или что-то там у вас, мультизагрузку с выбором ядра. Можете
>проделать это всё на полигоне, затем на реальной машине.Спасибо за совет!
В моем текущем ядре это включено, но не спасает меня от вопросов пользователей "на какой ип коннектиться?" в случаи падения канала. Хотелось бы уйти от этих вопросов.
Вижу теоретический выход в приобретении AS и установки quagga, переделать у пользователей ИП на доменное имя (две записи IN A) и наслаждаться. Я и сам понимаю, что мне 255 айпишек не нужны, но меньше купить невозможно.
Останется только настроить всё это, но это отдельная тема.
>В моем текущем ядре это включено, но не спасает меня от вопросов
>пользователей "на какой ип коннектиться?" в случаи падения канала. Хотелось бы
>уйти от этих вопросов.
>Вижу теоретический выход в приобретении AS и установки quagga, переделать у пользователей
>ИП на доменное имя (две записи IN A) и наслаждаться. Я
>и сам понимаю, что мне 255 айпишек не нужны, но меньше
>купить невозможно.
>Останется только настроить всё это, но это отдельная тема.Правильно думаешь - Клиентам сказать тыкаться не на IP, а на FQDN имя, напримр vpn.domain.ru
В dns создать две записи
vpn.domain.ru A xxx.xxx.xxx.xxx
vpn.domain.ru A yyy.yyy.yyy.yyy
в BIND 9 сказать выдавать эти айпи циклически
( в options
rrset-order { class IN type A name "domain.ru" order cyclic; };
TTL выставить минимальный.
Со второй попытки будут попадать на живой IP. Решение конечно не ахти, но хоть что-то. Может кто лучше предложит.Можно еще проще. Клиентам настроить два VPN на разные айпи, не пашет первый - запускать второй, и не нужно никого спрашивать.
Иметь свою AS неплохо, но тут тоже есть подводные камни. Ладно если канал упал и лежит, а если пропадание скачет? Время перестройки таблиц и анонсирование на рутерах занимает длительное время, если туда-сюда скакать, до 20 минут может уйти.
>Иметь свою AS неплохо, но тут тоже есть подводные камни. Ладно если
>канал упал и лежит, а если пропадание скачет? Время перестройки таблиц
>и анонсирование на рутерах занимает длительное время, если туда-сюда скакать, до
>20 минут может уйти.Лично у меня получилось вот так:
eth0 - локальная сеть, она же для канала №2
eth0:1 - локальная сеть для VPN-щиков.
eth1 - канал №1 в интернет
eth1.100 - VLAN между офисом и складом, проброшенный внутри канала №1
ppp0-pppXX - VPN подключения пользователей за пределами офиса/склада.
192.168.0.XXX - локальные пользователи.Ограничения: всего 2 физических интерфейса, непонимание разных-там-протоколов и всякой всячины. Только Linux-платформа. Срок выполнения с отрицательным значением.
Задача: создать сказку для всех пользователей.Результат: пользователи из офиса/склада ходят там, где надо (мир + локал), внешние пользователи могут использовать как внутренние, так и внешние сервисы.
=== скрипт
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# удалить все действующие правила
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Всегда принимать трафик на loopback-интерфейсеiptables -A INPUT -i lo -j ACCEPT
# Разрешить соединения, которые инициированы изнутри (eth0)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o ppp+ -m state --state ESTABLISHED,RELATED -j ACCEPT
#### Masquerade.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8800 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5190 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6880:7000 -j REDIRECT --to-port 3128
# Слушаем почтовые порты и перенаправляем на почтовый сервер.iptables -t nat -A PREROUTING -p tcp --dst 62.182.X.Y --dport 25 -j DNAT --to-destination 192.168.0.222
iptables -A FORWARD -i eth1 -d 192.168.0.222 -p tcp --dport 25 -j ACCEPTiptables -t nat -A PREROUTING -p tcp --dst 62.182.X.Y --dport 110 -j DNAT --to-destination 192.168.0.222
iptables -A FORWARD -i eth1 -d 192.168.0.222 -p tcp --dport 110 -j ACCEPTiptables -t nat -A PREROUTING -p tcp --dst 62.182.X.Y --dport 587 -j DNAT --to-destination 192.168.0.222
iptables -A FORWARD -i eth1 -d 192.168.0.222 -p tcp --dport 587 -j ACCEPT# ADSL-модем настроен роутером (по некоторым причинам) и форвардит 4 порта на Fedora-box
# перенаправляем со второго интерфейса почту на почтовый сервер.
iptables -t nat -A PREROUTING -p tcp --dst 192.168.0.195 --dport 587 -j DNAT --to-destination 192.168.0.222
iptables -A FORWARD -i eth1 -d 192.168.0.222 -p tcp --dport 587 -j ACCEPTiptables -t nat -A PREROUTING -p tcp --dst 192.168.0.195 --dport 110 -j DNAT --to-destination 192.168.0.222
iptables -A FORWARD -i eth1 -d 192.168.0.222 -p tcp --dport 110 -j ACCEPTiptables -t nat -A PREROUTING -p tcp --dst 192.168.0.195 --dport 143 -j DNAT --to-destination 192.168.0.222
iptables -A FORWARD -i eth1 -d 192.168.0.222 -p tcp --dport 143 -j ACCEPTiptables -t nat -A PREROUTING -p tcp --dst 192.168.0.195 --dport 25 -j DNAT --to-destination 192.168.0.222
iptables -A FORWARD -i eth1 -d 192.168.0.222 -p tcp --dport 25 -j ACCEPT
# Разрешаем соединение с PPTP-сервером для всех;
iptables -A INPUT -m tcp -p tcp --dport 1723 -j ACCEPT# Разрешаем протокол GRE для всех;
iptables -A INPUT -p gre -j ACCEPTiptables -A FORWARD -i eth0 -o ppp+ -m state --state NEW -p gre -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -m state --state NEW -p gre -j ACCEPTiptables -A FORWARD -i eth1 -o eth0 -m state --state NEW -p gre -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state NEW -p gre -j ACCEPT#
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth1 -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT# World for warehouse:
iptables -A FORWARD -i eth1.100 -o eth0 -j ACCEPT
# чтобы можно было много раз запускать скрипт.
/sbin/ip rule del table 1
/sbin/ip rule del table 2
/sbin/ip rule del table 1
/sbin/ip rule del table 2
/sbin/ip rule del table 1
/sbin/ip rule del table 2
/sbin/ip rule del table 1
/sbin/ip rule del table 2
/sbin/ip rule del table 1
/sbin/ip rule del table 2
#Задание правил маршрутизации IP по источнику для DSL
/sbin/ip rule add from 192.168.0.195 lookup 1
/sbin/ip route add 192.168.0.0/24 via 192.168.0.195 table 1
/sbin/ip route add 192.168.100.0/24 via 192.168.100.1 table 1
/sbin/ip route add 0/0 via 192.168.0.205 table 1#Задание правил маршрутизации IP по источнику
#для кабельного модема
/sbin/ip rule add from 62.182.X.Y lookup 2
/sbin/ip route add 192.168.0.0/24 via 192.168.0.195 table 2
/sbin/ip route add 192.168.100.0/24 via 192.168.100.1 table 2
/sbin/ip route add 0/0 via 62.182.X.Y table 2
/sbin/ip route add default equalize nexthop via 62.182.X.Y dev eth1 weight 1 nexthop via 192.168.0.205 dev eth0 weight 2# Включить forward
echo 1 > /proc/sys/net/ipv4/ip_forward
=== конец скрипта
=== вывод /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:YY:XX
inet addr:192.168.0.195 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: xxxxxxxxxxxxxxxxxxxxx Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4882528 errors:0 dropped:0 overruns:0 frame:0
TX packets:4852570 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1807257021 (1.6 GiB) TX bytes:1667394752 (1.5 GiB)
Interrupt:21 Base address:0x6000eth0:1 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.1.195 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:21 Base address:0x6000eth1 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:62.182.X.Y Bcast:62.182.X.Z Mask:255.255.255.252
inet6 addr: xxxxxxxxxxxxxxxxxxxx Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3515408 errors:0 dropped:0 overruns:0 frame:0
TX packets:1371371 errors:0 dropped:0 overruns:0 carrier:0
collisions:11090 txqueuelen:1000
RX bytes:993204705 (947.1 MiB) TX bytes:250501114 (238.8 MiB)
Interrupt:20 Base address:0xa400eth1.100 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.100.1 Bcast:192.168.100.7 Mask:255.255.255.248
inet6 addr: xxxxxxxxxxxxxxxxxxxxx Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18898 errors:0 dropped:0 overruns:0 frame:0
TX packets:24132 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1297122 (1.2 MiB) TX bytes:32352819 (30.8 MiB)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:63621 errors:0 dropped:0 overruns:0 frame:0
TX packets:63621 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:84760923 (80.8 MiB) TX bytes:84760923 (80.8 MiB)# пользовательские подключения:
ppp0 Link encap:Point-to-Point Protocol
inet addr:192.168.1.195 P-t-P:192.168.1.152 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1396 Metric:1
RX packets:51537 errors:0 dropped:0 overruns:0 frame:0
TX packets:50700 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:4715996 (4.4 MiB) TX bytes:14402777 (13.7 MiB)ppp1 Link encap:Point-to-Point Protocol
inet addr:192.168.1.195 P-t-P:192.168.1.154 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1396 Metric:1
RX packets:36127 errors:0 dropped:0 overruns:0 frame:0
TX packets:33257 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:2996923 (2.8 MiB) TX bytes:6929575 (6.6 MiB)=== конец /sbin/ifconfig
=== вывод /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.152 * 255.255.255.255 UH 0 0 0 ppp0
192.168.1.154 * 255.255.255.255 UH 0 0 0 ppp1
62.182.X.Z * 255.255.255.252 U 0 0 0 eth1
192.168.100.0 * 255.255.255.248 U 0 0 0 eth1.100
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth1
default 62.182.X.Z 0.0.0.0 UG 0 0 0 eth1=== конец /sbin/route
Ключевой момент: в настройках у eth0 и eth1 не указаны шлюзы (gateway) по-умолчанию.
Скрипт может иметь лишние строчки, но времени на оптимизацию банально нету. И так работает :)