Ситуация почти классическая:
Prov-1 Prov-2
gw(1.1.1.9)| |gw(2.2.2.9)
| |
| |
| |
eth1(1.1.1.1)| |eth2(2.2.2.2)
_______________________________
| |
| linux router |
| +squid |
| |
________________________________
| eth0(192.168.0.1)
|
|
| user1 IP=192.168.0.100
Есть маршрутизатор, на нем же запущен squid.
Есть два исходящих канала наружу.
маршрутизация поднята самым обычным образом.
прописаны конфиги интерфейсов в /etc/sysconfig/network-scripts
дистрибутив ALT Linux Master 2.2
ну ессно есть файл /etc/sysconfig/network, в котором маршрут по умолчанию
указан.
маршрут по умолчанию идет через eth2 на второго провайдера(Prov-2).
Мне нужно заюзать первый канал.
Хочу туда только http трафик пустить. Все юзера работают через проксю,
squid живет тоже на этой тачке.
Вот и вопрос у меня - как это можно сделать?
В squid есть параметр tcp_outgoing_address
то есть типа я могу сквид заставить при обращении определенных адресов,
наружу делать соединение с адреса 1.1.1.1
Но вот как разрулить дальше, чтобы этот пакет ушел через eth1?
нельзя, чтобы пакет с src_ip=1.1.1.1 оказался в сети Prov-2.
Вроде как для этого имеется как раз iproute2.
Но че-то у меня не получается им разрулить это.
Делаю вот что:
вписал таблицу в /etc/iproute2/rt_tables
строку: "100 tbl1"
дальше:
$ip rule add from 1.1.1.1 table tbl1
$ip route add default via 1.1.1.9 dev eth1 table tbl1
$ip route flush cache
далее для проверки я делаю на маршрутизаторе hping с src_ip=1.1.1.1
и по tcpdump вижу, что пакет этот выходит из eth2.
то есть впринципе-то ответ на него придет, но мне нужно разделить
и исходящий трафик.
Вот еще привожу вывод команд:
$ip route show table tbl1
default via 1.1.1.9 dev eth1
$ip rule
0: from all lookup local
32765: from 1.1.1.1 lookup tbl1
32766: from all lookup main
32767: from all lookup 253
$
Может что-то нужно в /proc добавить?