私のシステムはarmbian 11.6を実行しています。
wlan0経由でインターネットに接続し、正常に動作します。また、openvpn(tun0) 接続もあります。
tun0を使用する必要があるいくつかのプログラムを除いて、すべてのトラフィックがwlan0を介してルーティングされることを望みます。 VPNサーバーが正常に動作しており、NAT構成も問題ありません。
私のarmbianシステムには次のパスがあります。
default via 192.168.10.1 dev wlan0 proto dhcp metric 600
default via 10.8.0.1 dev tun0 metric 900
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.52
169.254.0.0/16 dev wlan0 scope link metric 1000
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.100 metric 600
これで、カールの実行に問題が発生します。次のように動作します。
curl --interface tun0 https://api.ipify.org?format=json
このタイムアウト:
curl --interface 10.8.0.52 https://api.ipify.org?format=json
興味深い事実:IPアドレスで実行してtcpdumpと並行して監視すると、送信元IP 10.8.0.52へのアウトバウンドパケットがwlan0を通過することがわかります。明らかにそれが失敗した理由です。
ソースIPを指定する機能を持つ他のアプリケーションでも同じ動作が観察されました。
この問題をどのように解決できますか?つまり、IPが属するアダプタを使用するようにシステムに指示できますか?
別の興味深い動作は、wlan0 を tun0 より高いメトリックに設定すると、問題が反対方向に発生することです。
答え1
ルートは(通常)目的地にあります。異なるメトリックを持つ複数の基本パスを持つことは意味がありません。ソースベースのポリシールーティングを使用する必要があります。
ip ro del default via 10.8.0.1
ip rule add from 10.8.0.52/32 table 10
ip route add default via 10.8.0.1 table 10
確認してくださいman ip-rule
。