[Sysadmins] два шлюза и проброс во внутреннюю сеть
Igor Solovyov
=?iso-8859-1?q?gosha_=CE=C1_anti=2Esu?=
Вс Ноя 11 20:21:34 MSK 2007
Hi!
On Fri, 2 Nov 2007 15:54:18 +0300
"Peter V. Saveliev" <peet на altlinux.ru> wrote:
> Давайте посмотрим, как вообще можно управлять классами маршрутизации
> в Linux....
В общем докладываю.
На всякий случай напомню, схема такова: маршрутизатор, два канала,
оба с приватными адресами на моей стороне, но один из них nat-ится
циской, которая имеет реальный ip:
канал 2 - сюда нужно выпустить web-трафик
adsl-модем
(192.168.1.1)
|
192.168.1.2
маршрутизатор
(прокси, почта)
192.168.151.22
|
|<- локалка 192.168.151.0/24
|
(192.168.151.254)
cisco
канал 1 - сюда нужно выпустить почту
интрефейсы:
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:80:48:22:BA:94
inet addr:192.168.151.22 Bcast:192.168.151.255
.....
eth1 Link encap:Ethernet HWaddr 00:80:48:4F:A1:E3
inet addr:192.168.1.2 Bcast:192.168.151.255
....
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
....
Слушающие сервисы:
192.168.151.22:25 0.0.0.0:* LISTEN 4838/master
192.168.151.22:110 0.0.0.0:* LISTEN 4761/cyrmaster
192.168.151.22:143 0.0.0.0:* LISTEN 4761/cyrmaster
192.168.151.22:8080 0.0.0.0:* LISTEN 4987/(squid)
192.168.151.22:53 0.0.0.0:* LISTEN 4710/named
127.0.0.1:53 0.0.0.0:* LISTEN 4710/named
127.0.0.1:953 0.0.0.0:* LISTEN 4710/named
т.е. почта и прокси слушают только на eth0, глядящий в локалку
и на циску с реальным айпишником снаружи (канал 1).
маршрут по умолчанию установлен на канал 2:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
192.168.151.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth1
Теперь iproute:
# cat /etc/iproute2/rt_tables
255 local
254 main
253 default
0 unspec
150 adsltab # таблица для канала 2
151 dtab # таблица для канала 1
# ip ru l
0: from all lookup local
150: from all iif eth1 lookup adsltab
151: from all iif eth0 lookup dtab
200: from all fwmark 0x19 lookup dtab
201: from all fwmark 0x6e lookup dtab
202: from all fwmark 0x8f lookup dtab
204: from all fwmark 0xe4 lookup adsltab
32766: from all lookup main
32767: from all lookup default
# ip ro l t adsltab
default via 192.168.1.1 dev eth1
# ip ro l t dtab
default via 192.168.151.254 dev eth0
так выглядит маркировка пакетов:
# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 MARK set 0x19
MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 MARK set 0x6e
MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:143 MARK set 0x8f
MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 MARK set 0xe4
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
В результате всего этого squid исправно выгоняет трафик в канал 2(eth1)
как и задумывалось, а вот postfix тоже упорно пытается выйти наружу
через этот же канал 2 вместо канала 1, что наблюдается tcpdump-ом. :-(
В общем пока получилось только наполовину. Squid выходит в нужный канал,
но он бы и так туда выходил бы, раз default gw туда прописан. :-(
Где же грабли порылись? Уже второй день эротикой занимаюсь...
--
Best Regars!
Igor Solovyov
Подробная информация о списке рассылки Sysadmins