Доброго вечера!
Есть несколько вопросов по маршрутизации.
Есть 3 сети :) Первые две от провайдеров, обе с битовой маской /29 (иначе говоря 1 айпишник - роутер провайдера, остальные 5 в нашем свободном пользовании). Ну и разумеется сетка предприятия - класса B, 172.16.0.0/16
Есть около 5-ти серверов, у каждого сервера есть по IP-адресу из каждой сети, один сервер выступает в качестве маршрутизатора.
Дак вот мне хотелось бы, чтобы все сервера были доступны из всех сетей, т.е. доступ внутри сети к серверам только по определенным портам и т.д (дело за iptables, я в курсе) и доступ извне возможен с обоих внешних адресов.
Также чтоб инет во внутрь раздавался с помощью NAT'а и при падении одного канала был доступ с другого.
Гуглил много, читал много, статьи LARTC тоже, писал несколько таблиц маршрутизации iproute2, мучал iptables (пока что вывалил пару ошибок, еще не разбирался). Добился только доступа по одному внешнему IP-адресу, меняя дефолтный шлюз в главной таблице.
Поможите пожалуйста, люди добрые, маршрутизация таки темный лес :D
Если нужно, выложу скрипты iproute и iptables.
Вопросы по маршрутизации
есть такое понятие - сегментация сети. Организуй сегмент серверов и юзерский сегмент. И доступ в сегмент серверов (с отдельным адресным пространством) организуй через шлюз с межсетевым экраном. Тогда твоя схема намного упростится и реализовать твои задумки будет намного проще.
есть такое понятие - сегментация сети. Организуй сегмент серверов и юзерский сегмент. И доступ в сегмент серверов (с отдельным адресным пространством) организуй через шлюз с межсетевым экраном. Тогда твоя схема намного упростится и реализовать твои задумки будет намного проще.
Дак я это и планировал. 2 внешних сегмента для серверов и один внутренний для юзеров и весь трафик гонится через один единый шлюз. Все именно так.
Но только реализацию мне пока не понять, ежели примерно ясно что писать в iptables то несовсем понятно как быть с маршрутами.
Собственно маршрутизация:
[console]
# cat routing.sh
#!/bin/sh
###########
#
# Routing
#
###########
#
# -- Settings --
#
# IP utility location
IP="/sbin/ip"
# Localhost
LO_IF="lo"
LO_IP="127.0.0.1"
LO_NET="127.0.0.0/8"
# Local network
LOCAL_IF="vlan10"
LOCAL_IP="172.16.10.1"
LOCAL_NET="172.16.0.0/16"
# Provider-1
P1_IF="vlan11"
P1_IP="188.XXX.XXX.2"
P1_NET="188.XXX.XXX.0/29"
P1_GW="188.XXX.XXX.1"
# Provider-2
P2_IF="vlan12"
P2_IP="194.XXX.XXX.2"
P2_NET="194.XXX.XXX.0/29"
P2_GW="194.XXX.XXX.1"
#
# -- End of 'Settings' --
#
#
# -- Flush routing tables --
#
$IP route flush table p1
$IP route flush table p2
$IP route flush table main
$IP route flush cache table p1
$IP route flush cache table p2
$IP route flush cache table main
$IP rule delete table p1
$IP rule delete table p2
#
# -- End of 'Flush routing tables --
#
#
# -- Routing tables --
#
# Provider-1
$IP route add $LO_NET dev $LO_IF src $LO_IP table p1
$IP route add $P1_NET dev $P1_IF src $P1_IP table p2
$IP route add $LOCAL_NET dev $LOCAL_IF src $LOCAL_IP table p2
$IP route add default via $P1_GW table p2
# Provide-2
$IP route add $LO_NET dev $LO_IF src $LO_IP table p2
$IP route add $P2_NET dev $P2_IF src $P2_IP table p2
$IP route add $LOCAL_NET dev $LOCAL_IF src $LOCAL_IP table p2
$IP route add default via $P2_GW table p2
# Main Table
$IP route add $LO_NET dev $LO_IF src $LO_IP table main
$IP route add $P1_NET dev $P1_IF src $P1_IP table main
$IP route add $P2_NET dev $P2_IF src $P2_IP table main
$IP route add $LOCAL_NET dev $LOCAL_IF src $LOCAL_IP table main
$IP route add default via $P1_GW table main
#
# -- End of 'Routing Tables' --
#
#
# -- Routing Rules --
#
$IP rule add from $P1_IP table p1
$IP rule add from $P2_IP table p2
#
# -- End of 'Routing Rules' --
#
[/console]
собственно при таком раскладе серв доступен из локалки и только по 1-му внешнему адресу, какой именно внешний адрес становится доступен решает команда:
ip route replace default via ПРОВАЙДЕР table main
Но мне нужно чтобы доступ был с обоих внешних адресов. Как сделать?
Хмм.. Кстати говоря, заметил что:
[console]
# ip route list table p1
188.XXX.XXX.0/29 dev vlan11 scope link src 188.XXX.XXX.2
172.16.0.0/16 dev vlan10 scope link src 172.16.10.1
127.0.0.0/8 dev lo scope link src 127.0.0.1
# ip route list table p2
194.XXX.XXX.0/29 dev vlan12 scope link src 194.XXX.XXX.2
172.16.0.0/16 dev vlan10 scope link src 172.16.10.1
127.0.0.0/8 dev lo scope link src 127.0.0.1
# ip route list table main
188.XXX.XXX.0/29 dev vlan11 scope link src 188.XXX.XXX.2
194.XXX.XXX.0/29 dev vlan12 scope link src 194.XXX.XXX.2
172.16.0.0/16 dev vlan10 scope link src 172.16.10.1
127.0.0.0/8 dev lo scope link src 127.0.0.1
default via 188.XXX.XXX.1 dev vlan11
[/console]
т.е. дефолтовые шлюзы в таблицы p1 и p2 не пишет..
Добавлено: ну точно, при запуске скрипта маршрутизации, вываливает:
[console]
RTNETLINK answers: No such process
RTNETLINK answers: No such process
[/console]
Убираешь
$IP route add default via $P1_GW table p2
$IP route add default via $P2_GW table p2
и начинает запускаться без пререканий, но шлюзов в таблицах нет oO
что к чему..