Sziasztok,
eddig nem sikerült megoldást találnom:
van ket interface; az openvpn és az asterisk forgalmát az egyik, minden mást a másik interface irányába szeretnék terelni; főszereplőnk a második interface: enp0s3
A felállás:
- xxx.xxx.xxx.xxx a destination ip
- t1 a tabla, amire illeszkedik a rule
- enp3s0 a gonosz interface
- !gonosz interface ( enp0s31f6 )
A routing tábla így fest:
default via 192.168.1.254 dev enp0s31f6 onlink
xxx.xxx.xxx.0/24 dev enp3s0 proto kernel scope link src xxx.xxx.xxx.xxx
192.168.1.0/24 dev enp0s31f6 proto kernel scope link src 192.168.1.220
A t1 tábla routingja így néz ki
default via xxx.xxx.xxx.1 dev enp3s0
A hozzá tartozó rule ez:
32765: from xxx.xxx.xxx.xxx lookup t1
Minden tcp forgalom rendben lezajlik, azonban ha udp protokollt használok, a következő történik:
Nem hallgat semmi szerveroldalon, kliensoldalon
echo retek |nc -v -u xxx.xxx.xxx.xxx 1194
xxx.xxx.xxx.xxx 1194 (openvpn) open
tcpdump ekkor:
16:21:23.336886 IP 192.168.3.109.44784 > xxx.xxx.xxx.xxx.1194: UDP, length 6
16:21:23.358430 IP xxx.xxx.xxx.xxx > 192.168.3.109: ICMP xxx.xxx.xxx.xxx udp port 1194 unreachable, length 42
azoonban, ha a másik oldalon szintén hallgat a netcat, akkor:
16:21:34.297789 IP 192.168.3.109.56841 > xxx.xxx.xxx.xxx.1194: UDP, length 6
...és ekkor a !gonosz interface -n megy a válasz.
Vontakozó iptables szabályok:
-A INPUT -i enp3s0 -p udp -m udp --dport 1194 -j ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i enp3s0 -j REJECT --reject-with icmp-port-unreachable
-A POSTROUTING -o enp3s0 -j MASQUERADE
-A POSTROUTING -o enp3s0 -j SNAT --to-source xxx.xxx.xxx.xxx
Az utóbbi kettővel működik/működött az asterisk, de az ezek szerint csak azért, mert a szolgáltató irányába erre az interface-re direkt routing volt beállítva. Mivel ezt kiszedtem, az udp miatt az asterisk is rossz interface -n válaszol, magyarul protokoll és nem szolgáltatásfüggő a probléma.
Őszintén szólva: lövésem sincs, mi okozhatja ezt. Ha tudnátok némi világosságot hozni a dologba, azt megköszönném, én elakadtam :)
Update1:
Reverse path filtering b..szkurálása sem segített
dmesg -ben semmi nyoma problémának.
Update2:
tcp -vel workaroundolok, hatha.