( gyu | 2017. 06. 19., h – 21:03 )

Hints:
- networkmanagert küldd el a h...l f...ára. Legalábbis beszéld le arról, hogy a te két internet felé néző interfészeddel akarjon bármit barmolni. Már nem emlékszem hogy kell megoldani, de google ad rá jó találatokat, hogy network managert lebeszéljünk arról, hogy bizonyos interfészeket ő managelni akarjon.
Amúgy, ha más interfészeid meg nem lesznek, akkor a komplett nework-managert agyon lehet verni. (kicsit gonoszkodva: Lénár' Pöteringgel együtt!)

- /etc/network/interfaces -t írd meg jól. Amikor hasonlót csináltam, én oda vettem fel minden okosságot.
Az rt_tables -be egyszer írsz be, és onnantól már néven tudod nevezni a tábláid.

- a két interfészed meg gondolom static. ill, még előfordulhat, hogy dhcp-n kap mind a kettőn ip-t. Az még trükkös lehet :/ Tegyük fel az egyszerű esetet, hogy nem az.
Ebben az esetben kb. valami ilyesmi az interfaces-ed

auto lo
iface lo inet loopback
up iptables-restore </etc/iptables.szabalyaid.txt

auto eth0
iface eth0 inet static
address ...
netmask ...
gateway ...
up ip rule list | grep -q fwmark\ 0x1 || ip rule add fwmark 1 table tabla1
up ip route list table tabla1 | grep -q ... || ip route add ...
up ip route list table tabla1 | grep -q ... || ip route add ...
# ha akarod, akkor down-nal ki is veheted a szabalyokat

auto eth1
iface eth1 inet static
address ...
netmask ...
gateway ...
up ip rule list | grep -q fwmark\ 0x2 || ip rule add fwmark 2 table tabla2
up ip route list table tabla2 | grep -q ... || ip route add ...
up ip route list table tabla2 | grep -q ... || ip route add ...
# ha akarod, akkor a down-nal ki is veheted amit betettel

A tabla1-ben kell kb 1 route a local networkre, meg 1 az azon az interfeszen levo defaultroute-ra.
A tabla2-ben kell 1 route az ottani local networkre, meg 1 az ottani defaultrouter-ra.

A döntéseket, loadbalanceingot meg fwmark-kal mangle táblában, ahogy jól esik.

Amire figylej: conmark-ot célszerű használni!
Ha egyszer egy tcp kapcsolatot elkezdtél kiépíteni az egyik interfészen, akkor utána a kapcsolat minden vonatkozó (pl. related icmp-k) csomagját is arrafelé küldd.

DNS-t célszerű, kifejezetten csak az egyik felé küldeni. Bár a legtisztább, ha saját magadnak rezolvolsz mindent egy localhost-on futó dns-szerverrel.

Egy openwrt-s eszközöm van, amin most részben hasonló a konfig. Ott csak egy uplink-em van, DE van egy vpn-em is, és bizonyos forgalmakat, specifikusan a vpn-en szeretnék ki-be-küldeni.
Ott a /etc/firewall.user -em néz ki így, némi anonimizálás után:
ip rule list |grep -q fwmark\ 0x1 || ip rule add fwmark 1 table vpn
ip rule list |grep -q 172.28.33.40 || ip rule add from 172.28.33.40 table vpn
ip route list table vpn | grep -q tap0 || ip route add default via 192.168.4.1 dev tap0 table vpn
iptables-save |grep -q vpn1 || iptables -t mangle -A fwmark -s 172.28.33.39/32 -p tcp -m tcp --sport 22 -m comment --comment vpn1 -j MARK --set-mark 1
iptables-save |grep -q vpn2 || iptables -t mangle -A fwmark -s 172.28.33.39/32 -p tcp -m tcp --sport 49000:49010 -m comment --comment vpn2 -j MARK --set-mark 1
iptables-save |grep -q vpn3 || iptables -t mangle -A fwmark -s 172.28.33.39 -d 5.135.189.lol -m comment --comment vpn3 -j MARK --set-mark 1

Van, hogy a vpn interfész elbomlik, újraindul, etwas. Olyankor csak újra lefuttatom ezt a scriptet, és mindent rendberak. Azért is ez a sok grep-feltételes parancs.
Pár magyarázat:
* cgnat mögött vagyok, nincs publikus ipv4 címem. Így egy a vpn túloldalán lévő DNAT szabály + a wrt saját konfigjában lévő szabály együtt megoldja, hogy ami kintről beforwardolódik az egyik illumos-zónámba (jail-nek kb megfelelő konténer). Viszont visszafelé is a vpn-en kellene route-olódjanak a csomagok, és ebben a nyavajás wrt-ben valamiért a connmark-kal meg a gyári 3.10-es kerneljével nem bírtam zöldágra vergődni. így a vpn1 kommentű szabály segít abban, hogy az olyan csomagnak, ami a zóna ssh szerere felől jön, az is a vpn-be route-olódjon.
* Ugyanez még a 49000-49010 porttartományra. Szerettem volna, ha tudok "tesztnek" "szolgáltatást" tenni, (szemi-)"publikusan" elérhető formában. Az, hogy ilyen eldugott portokra teszem, nem zavart, nem az volt a lényeg.
* Ha a zóna felől, egy bizonyos IP felé menne a forgalom, akkor azt is a vpn-en kereszül route-olja.

Ill, ami az fwmark-on kívül volt: ha az ip rule szabályaiban nem szerepel a 172.28.33.40-es cím, akkor lefuttatja ezt is: ip rule add from 172.28.33.40 table vpn
Vagyis minden forgalom, ami a 172.28.33.40 felől jön (ő egy virtualboxban futó linuxban lévő lxc), az bármerre is menne a neten, az mindig a vpn-en keresztül megy ki. (túloldalt, értelemszerűen, a tőlem jövő forgalom snat-al van a net felé engedve)

Remélem, sikerült még némi muníciót adni! ;-)