( bAndie9100 | 2020. 08. 11., k - 01:53 )

ami nekem furcsa az a -j MASQUERADE -t követő -j SNAT. a MASQUERADE az termináló rule, tehát ott az SNAT-os szabályt sose éri el elvileg.

ami még meg szokott viccelni nat-os szabályok álligatásakor, az az hogy a conntrack táblába egy korábbi iptables konfigurációból "beragadnak" connectionök, amiket később már nem vagy nem úgy nell natolni, pl. kiveszel egy SNAT/DNAT/MASQUERADE szabályt vagy --to-ports opciót átállítasz. ilyenkor - ugyan nem kisérleteztem ki - de nekem úgy tűnt mintha nem venné figyelembe a változott iptables szabályokat, amikor korábbi konfig idején kelt forgalmat natolja. "conntrack -F" segíthet ilyenkor.

 

service alapú routingot én fwmark-kal szoktam csinálni:

ha az asterisk és az openvpn helyben futnak, akkor 

- -t nat -A OUTPUT -p udp --sport 1194 -j MARK --or-mark 0x01  # 1. bit megjelölése az openvpn által küldött packetokon
- -t nat -A OUTPUT -m owner --uid-owner asterisk -j MARK --or-mark 0x01  # az asterisk forgalmát nem lehet egyetlen porttal meghatározni, úgyhogy inkább local user uid alapján fognám meg
- ip rule add fwmark 0x01/0x01 lookup $table_id  # ha a bit 1 be van jelölve, használja ezt a route táblát
- ip route add 0.0.0.0/0 via $gw dev $iface table $table_id  # gateway és kimenő interface beállítása a spéci route táblán

ha az asterisk nem azon a gépen fut, ahol a tűzfal+routing lokiga működik, akkor lehetne 3 lépésben megfogni:

- --uid-owner plusz -j MARK-kal megjelölni az asteriskes packetokat OUTPUT chain-ben
- -m mark --mark 0x01/0x01 plusz -j SNAT -tal a megjelölt packetokat egy dedikált source IP-ről küldeni (POSTROUTING-nál nem lehet az owner modult használni, ezért kell a mark-kal átadni az infót)
- a router gépen simán "-s" source IP alapján routolni, mint fent.

az openvpn mivel mindig egy porton beszél, a routeren is el lehet különíteni a forgalmát.