интернет через 2 провайдеров+проброс портов - решение проблемы
Немало помучившись с решением проблемы, публикую результат. Выражаю благодарность Pinkbype и somestuff за оказанную неоценимую помощь. Итак была задача: имеем двух провайдеров. Необходимо обеспечить доступ в интернет из локальной сети и доступ из интернета к нашим ресурсам по портам 21, 80, 8004, 8005. Чтобы упростить задачу были созданы две локальные подсети, работающие каждая через своего провайдера. Весь http-трафик идет через первого провайдера.
Решение. OS - Ubuntu server 10.10 Установлены dnsmasq и squid
Прошу сильно не бить за ошибки. Но все работает.
Настройка сетевых интерфейсов
##########/etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
# Локальная сеть
auto eth0
iface eth0 inet static
address 192.168.0.8
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
# Сеть провайдера 1
auto eth1
iface eth1 inet static
address 192.168.1.5
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
# Сеть провайдера 2
auto eth2
iface eth2 inet static
address 192.168.2.5
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
# Запускаем маршрутизатор
post-up /etc/start-router
############## конец файла
Cоздаем таблицы маршрутизации Т1 и Т2
########## файл /etc/iprouter2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.rule
10 T1
20 T2
############## конец файла
И собственно запускаем наш маршрутизатор
############# /etc/start-router
#! /bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
IP_LOCAL=«192.168.0.8» # адрес маршрутизатора в локальной сети
IP_INET1=«192.168.1.5» # адрес маршрутизатора в сети провайдера 1
IP_INET2=«192.168.2.5» # адрес маршрутизатора в сети провайдера 2
IF_LOCAL=«eth0» # интерфейс маршрутизатора в локальной сети
IF_INET1=«eth1» # интерфейс маршрутизатора в сети провайдера 1
IF_INET2=«eth2» # интерфейс маршрутизатора в сети провайдера 2
NET_LOCAL=«192.168.0.0/24» # локальная сеть
NET_INET1=«192.168.1.0/24» # сеть провайдера 1
NET_INET2=«192.168.2.0/24» # сеть провайдера 2
SUB_NET1=«192.168.0.0/25» # локальная подсеть 1
SUB_NET2=«192.168.0.128/25» # локальная подсеть 2
GW_INET1=«192.168.1.8» # шлюз в сеть провайдера 1
GW_INET2=«192.168.2.1» # шлюз в сеть провайдера 2
IP_WEB1=«192.168.0.4» # адреса web+ftp сервера IP_WEB2=«192.168.0.134» # адреса web+ftp сервера
IP_SOMS1=«192.168.0.3» # адреса RTK сервера
IP_SOMS2=«192.168.0.133» # адреса RTK сервера
IP_LOCAL_BROADCAST1=«192.168.1.127» # широковещательный адрес подсети 1
IP_LOCAL_BROADCAST2=«192.168.1.255» # широковещательный адрес подсети 2
IP_INET_BROADCAST1=«192.168.1.255» # широковещательный адрес сети провайдера 1
IP_INET_BROADCAST2=«192.168.2.255» # широковещательный адрес сети провайдера 2
# T1 -таблица маршрутизации для провайдера 1
# T2 -таблица маршрутизации для провайдера 2
# очищаем таблицы маршрутизации
ip route flush table T1
ip route flush table T2
# добавляем правила маршрутизации для провайдера 1
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T1
ip route add $NET_LOCAL dev $IF_LOCAL table T1
ip route add $NET_INET2 dev $IF_INET2 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add default via $GW_INET1 table T1
# добавляем правила маршрутизации для провайдера 2
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table T2
ip route add $NET_LOCAL dev $IF_LOCAL table T2
ip route add $NET_INET1 dev $IF_INET1 table T2
ip route add 127.0.0.0/8 dev lo table T2
ip route add default via $GW_INET2 table T2
# добавляем правила маршрутизации в таблицу main
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2
# добавляем маршрут по умолчанию
ip route add default via $GW_INET1
# очищаем правила
ip rule delete table T1
ip rule delete table T2
ip rule delete table T1
ip rule delete table T2
ip rule delete table T1
ip rule delete table T2
# правила маркировки пакетов
ip rule add fwmark 10 table T1
ip rule add fwmark 20 table T2
# добавляем правила для входящего трафика
ip rule add from $IP_INET1 table T1
ip rule add from $IP_INET2 table T2
# добавляем правила для входящего трафика
ip rule add from $SUB_NET1 table T1
ip rule add from $SUB_NET2 table T2
ip route flush cache