два сетевых интерфейса(два провайдера)

Thank you for reading this post, don't forget to subscribe!

И так есть у меня сер­вер, он же ОпенВПН сер­вер в одной орга­ни­за­ции. и вот упёр­лась орга­ни­за­ция в шири­ну кана­ла, соб­ствен­но беда в том, что по это­му же кана­лу ходил SIP тра­фик, и силь­но “лагал” когда шири­ны кана­ла не хватало

Под­клю­ча­ем ещё один канал от вто­ро­го про­вай­де­ра. есть сер­вер в нём внеш­ний канал (eth1), локаль­ная сеть(eth0), ещё ходит OpenVPN (tun0) для свя­зи с осталь­ны­ми филиалами.

Доба­вил­ся ещё один внеш­ний про­вай­дер (eth4). для его под­клю­че­ние я сде­лал так.
Напом­ню, что linux уме­ет рабо­тать с несколь­ки­ми таб­ли­ца­ми маршрутизации

Тоесть для удоб­ства я могу для каж­до­го сво­е­го фили­а­ла создать табил­цу марш­ру­ти­за­ции, и в ней уже удоб­но управ­лять марш­ру­та­ми, потом мне не надо будет листать про­сты­ню марш­ру­тов таб­ли­цы main

в файл
/etc/iproute2/rt_tables

Доба­вил 2 таблицы

201 T1
202 T2

У каж­до­го про­вай­де­ра будет своя таб­ли­ца маршрутизация
Т1 – пер­вый провайдер
Т2 – второй

Создал скрипт, что будет заве­до­вать маршрутизацией.

[codesyntax lang="php"]

[/codesyntax]

Где
IP# это ИП адрес на интерфейсе,
P# шлюз на интерфейсе
после это­го сер­вер отве­ча­ет по обо­им интер­фей­сам. так­же пинги/трацерты с сер­ве­ра ходят через нуж­ный интерфейс.

 ping -I eth4 ya.ru

теперь мне нуж­но что нуж­ные мне кли­ен­ты ходи­ли через этот интер­фейс нару­жу. в iptables.up.rules у меня есть пра­ви­ла НАТа

-A POSTROUTING -s 192.168.5.102 -o eth4 -j MASQUERADE
-A POSTROUTING -s 10.10.10.6 -o eth4 -j MASQUERADE
-A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1 -j MASQUERADE
-A POSTROUTING -s 10.10.0.0/255.255.0.0 -o eth1 -j MASQUERADE

пер­вы­ми 2мя стро­ка­ми я хочу чтоб вот 192.168.5.102 и 10.10.10.6 НАТи­лись через ново­го про­вай­де­ра. rp_filter выклю­ча­ем вот так в sysctrl

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

Теперь, надо пони­мать, что если идёт пакет на 192.168.5.108, то он попа­да­ет в таб­ли­цу T2 а в ней у нас что? пра­виль­но один толь­ко дефа­улт­гет­вей! а что такое дру­гие под­се­ти фили­а­лов и ОпенВПН мы знать не зна­ем, поэто­му тоже необ­хо­ди­мо доба­вить марш­рут в таб­ли­цу Т2 для ука­за­ния где у нас ходят­ся 10.10.10.0

ip route add 10.10.10.0/24 via 10.10.10.2 dev tun0 table T2

Всё это кида­ем в пер­вый скрипт, а скрипт в авто­за­груз­ку. Теперь ещё важ­ный момент, бра­у­зер у нас рабо­та­ет про­зрач­но через squid3 и полу­ча­ет­ся, что весь тра­фик ходит через один интер­фейс, а хттп тра­фик ходит через дру­гой, не хоро­шо полу­ча­ет­ся. поэто­му чита­ем дальше:

squid на два внешних интерфейса

что надо сде­лать для Squid чтоб  он исполь­зо­вал оба внеш­них канала.

Мне нуж­но было зару­лить толь­ко опре­де­лён­ный набор ИП адре­сов внут­рен­ней сети.

Объ­явим 2 спис­ка, ука­жем в каж­дом диа­па­зон ип адре­сов, кото­рые куда будем отправлять.

acl provider1 src 10.0.0.0/24
acl provider2 src 16.0.0.0/24

Чуть ниже ска­жем что нам мож­но что не можно

http_access allow provider1
http_access allow provider2

И даль­ше

tcp_outgoing_address 10.1.0.1 provider1
tcp_outgoing_address 10.1.0.2 provider2

10.1.0.1 10.1.0.2 – это внеш­ние адре­са сер­ве­ра с раз­ны­ми интерфейсами.

Соб­ствен­но всё