Имеем три канала в Интернет, IP интерфейсов: x.x.x.x, y.y.y.y, z.z.z.z
Создаем правила, для того чтобы пакеты каждого абонента (или группы) отправлять по своему каналу в Интернет.
IPTABLES:
1. В mangle, PREROUTING, пакет пришедший с адреса АБОН1 макрируем как MARK=1
В mangle, PREROUTING, пакет пришедший с адреса АБОН2 макрируем как MARK=2
В mangle, PREROUTING, пакет пришедший с адреса АБОН3 макрируем как MARK=3
2. В nat, POSTROUTING, пакет с MARK=1, SNAT to x.x.x.x
В nat, POSTROUTING, пакет с MARK=2, SNAT to y.y.y.y
В nat, POSTROUTING, пакет с MARK=3, SNAT to z.z.z.z
IP RULE:
1. ip rule add fwmark 1 table 1
2. ip rule add fwmark 2 table 2
3. ip rule add fwmark 3 table 3
IP ROUTE:
1. ip route add default via шлюз_от_x.x.x.x table 1
2. ip route add default via шлюз_от_y.y.y.y table 2
3. ip route add default via шлюз_от_z.z.z.z table 3
Все бы было хорошо, если бы не пришлось использовать прозрачный прокси для http-трафика.
Делаю так:
1. В nat, PREROUTING, пакет на 80 порт -> REDIRECT --to-ports 3128
Тем самым пакет попадает в цепочку INPUT, а потом смело вываливается из брандмауэра и попадает в прокси. Тот в свою очередь отправляет его от имени локальной машины в Интернет через “default route”.
Как быть?
И чтобы http-трафик журналировать, и чтобы каждый пользователь пользовался только своим каналом.