Писать полноценную статью мне лень. Поэтому это будет скорее заметка, в большей степени
для себя, чтобы не забыть.
Так уж сложились звезды, что схема не совсем простая и не ограничится одним шлюзом
на linux. Помимо шлюза на linux имеются еще два шлюза в виде Cisco 2801 и Cisco 851.
На цисках крутятся VPN соединения различного назначения и переносить их не вижу
особого смысла, а на linux маршрутизаторе так же стоит прокси.
Схема такая:
Cisco 2851 - prov_1 (LAN 192.168.1.1) NAT
Cisco 851 - prov_2 (LAN 192.168.16.1) NAT
Linux(ALT) :
Небольшой комментарий. На linux маршрутизаторе стоит два физических интерфейса.
Больше поставить не было возможности, поэтому пришлось использовать то что есть,
был создан alias (eth1:1) на интерфейсе (eth1) который смотрит на маршрутизаторы Cisco и
подключен коммутатор. Адресация такая:
eth1 192.168.1.2 255.255.255.0 GW 192.168.1.1
eth1:1 192.168.16.2 255.255.255.0 GW 192.168.16.1
eth0 192.168.0.1 255.255.255.0 (LAN)
На linux маршрутизаторе не используется NAT, поэтому пакеты проходят через него насквозь без
подмены адреса.
Начнем с создания алиаса (RHEL и подобные):
cd /etc/sysconfig/network-scripts
cp ifcfg-eth1 ifcfg-eth1:1
vi ifcfg-eth1:1
Убираем строку HWADDR="XX:XX:XX:XX:XX:XX", убираем строку GATEWAY="XX.XX.XX.XX",
строку DEVICE="eth1" меняем на DEVICE="eth1:1".
Файл должен выглядеть так:
DEVICE="eth1:1"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.16.2
NETMASK=255.255.255.0
NETWORK=192.168.16.0
Далее будем делать саму маршрутизацию:
Создадим конфигурационные файлы для скриптов запуска сетевых интерфейсов
touch route-eth1
touch route-eth1:1
touch rule-eth1
touch rule-eth1:1
Пишем в созданных нами файлах следующие:
Файл route-eth1
default via 192.168.1.1 table prov_1
Файл route-eth1:1
default via 192.168.16.1 table prov_2
Файл rule-eth1
from 192.168.1.2 table prov_1
Файл rule-eth1:1
fwmark 3 table prov_2
from 192.168.16.2 table prov_2
Теперь необходимо добавить эти таблицы в iproute2:
cd /etc/iproute2/
echo "201 prov_1" >> rt_tables
echo "202 prov_2" >> rt_tables
Перезапускаем сетевые интерфейсы:
service network restart
Проверяем правила (у меня это выглядит так) :
# ip rule list
0: from all lookup local
32760: from all fwmark 0x3 lookup prov_2
32761: from 192.168.16.2 lookup prov_2
32762: from 192.168.1.2 lookup prov_1
32766: from all lookup main
32767: from all lookup default
В файле rule-eth1:1 мы делали запись fwmark 3 table prov_2. При помощи iptables делаем маркировку
определенных пакетов. В данном случае мне нужно исходящие запросы на 80 направить на второй
провайдер:
iptables -A PREROUTING -t mangle -i eth0 -p tcp -m tcp --dport 80 -j MARK --set-mark 3
service iptables save
Теперь исходящие запросы на 80 порт будут уходить на prov_2.
Рассказывать про настройку Cisco я не стану, ибо сам делал по мануалам. Поэтому скажу главное что в
данной схеме будет необходимо.
Т.к. маршрутизатор linux без NAT необходимо сделать маршрут на цисках, чтобы получить ответ на запрос.
Приведу кусок моего конфига:
ip forward-protocol nd
ip route 0.0.0.0 0.0.0.0 внешний_IP_prov_2
ip route 192.168.0.0 255.255.255.0 192.168.16.2
Доступ сетей к NATу:
ip access-list extended NAT
permit ip 192.168.16.0 0.0.0.255 any
permit ip 192.168.0.0 0.0.0.255 any
Вот собственно и все. Надею кому-нибудь пригодится =)