Мережеві збочення

Дав­но я так не грав­ся.

Дано:

  • PBX з одним інтер­фей­сом і дво­ма біли­ми IP-адре­са­ми на ньо­му: 10.0.0.1 як primary і 10.0.0.2 як secondary (сірі адре­си я взяв для при­кла­ду);
  • SIP-про­вай­дер, який дає два різні тран­ки на дві різні IP-адре­си PBX із дво­ма різни­ми облі­ко­ви­ми запи­са­ми, але при цьо­му адре­са піра з боку про­вай­де­ра SIP-тран­ка одна­ко­ва для обох тран­ків і також біла: 192.168.0.1;
  • вели­ке бажа­н­ня різні облі­ко­ві запи­си SIP-тран­ків пуска­ти через окре­мі адре­си PBX, бо у про­вай­де­ра таке security.

Якщо вики­ну­ти зай­вий інфор­ма­цій­ний шум із вві­дних даних, то вияв­ля­є­ться, що ми хоче­мо, щоб один локаль­ний про­цес (Asterisk) під’єднувався до 192.168.0.1:5060 через 10.0.0.1 і 10.0.0.2 зале­жно від того, який облі­ко­вий запис вико­ри­сто­ву­є­ться.

Тоб­то, нам потрі­бен ста­ти­чний L7-мар­шрут (!!!).

Зві­сно, ніякий ip route/ip rule так ніко­ли не зро­бить. Голий iptables — також. Але є одне але.

Ми може­мо обхи­три­ти систе­му і ска­за­ти, що для дру­го­го облі­ко­во­го запи­су SIP-тран­ка Asterisk у яко­сті host має вико­ри­сто­ву­ва­ти не 192.168.0.1, а, напри­клад, 172.16.0.1, і цьо­го разу це має бути будь-яка сіра IP-адре­са. А далі всту­пає в дію махі­на­ція з DNAT/SNAT:

*nat
…
-A OUTPUT -d 172.16.0.1/32 -j MARK --set-xmark 0x10/0xffffffff
-A OUTPUT -d 172.16.0.1/32 -j DNAT --to-destination 192.168.0.1
-A POSTROUTING -m mark --mark 0x10 -j SNAT --to-source 10.0.0.2
…

Тут від­бу­ва­є­ться таке:

  1. тра­фік, який іде на фей­ко­ву IP-адре­су, мар­ку­є­ться яко­юсь міткою (число взя­те зі сте­лі, як, вла­сне, і сіра IP-адре­са);
  2. потім у цих же паке­тах під­мі­ня­є­ться адре­са при­зна­че­н­ня на адре­су піра SIP-тран­ка;
  3. потім за вста­нов­ле­ною рані­ше міткою під­мі­ня­є­ться адре­са від­прав­ни­ка так, щоб тра­фік ішов від іме­ні secondary IP.

Таким чином, увесь тра­фік, який іде на 172.16.0.1, насправ­ді йде на 192.168.0.1, при­чо­му від іме­ні 10.0.0.2.

Вуа­ля — все пра­цює. Без дода­тко­вих інтер­фей­сів, ip route/ip rule, tc (навіть tc уміє NAT, вияв­ля­є­ться) тощо.

Мітки: , ,

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

*

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.