パケットが常にデフォルトパスを見つける方法を見つけるのはなぜですか?

パケットが常にデフォルトパスを見つける方法を見つけるのはなぜですか?

もっと詳しく知りたい興味深い質問があります。

以下は、次のルールのリストです。

# ip rule show
0:  from all lookup local
32761:  from all to 188.40.122.95 lookup vpn
32762:  from all to 178.63.26.145 lookup vpn
32763:  from all to 176.9.71.146 lookup vpn
32764:  from all to 159.69.66.229 lookup vpn
32765:  from 192.168.100.0/28 lookup vpn
32766:  from all lookup main
32767:  from all lookup default

VPNテーブルは以下の通りです

# ip route show table vpn
default dev tun0 scope link
192.168.100.0/28 dev eth0 scope link

IPアドレスにpingを送信すると、88.40.122.95アウトバウンドインターフェイスはです。ここでデフォルトパスが見つかっtun0たので理解できます。table vpn

ただし、デフォルトのルートを削除すると、パケットはまだパスを探してインターフェイスを通過できますeth0

なぜこれですか?このルールを指定したいです。

32761:  from all to 188.40.122.95 lookup vpn
32762:  from all to 178.63.26.145 lookup vpn
32763:  from all to 176.9.71.146 lookup vpn
32764:  from all to 159.69.66.229 lookup vpn

パケットはテーブルの規則に従う必要がありvpn、テーブルにデフォルト値がないとパケットは失敗します。

この設計を行う理由は、これらのIPに対して生成されたトラフィックが通過して発信することだけを望むためですtun0。何らかの理由でdefaultルールが見つからない場合、ルールは失敗するはずです。

答え1

ただし、デフォルトのルートを削除すると、パケットはまだパスを探してインターフェイスeth0を通過できます。

はい、VPNテーブルに一致するエントリがなくなり、ip Routeが次のクエリを実行するためです。

throwこれを防ぐには、VPNテーブルの末尾にパスタイプを使用できます。たとえば、次のようになります。

ip route add throw default table vpn

その後、VPN テーブルにデフォルトのパスがない場合、検索はそこで停止します。

マニュアルページを確認してくださいip-route。あなたの場合に興味があるかもしれない他のタイプのパス:prohibit、、unreachableおよびblackhole

答え2

ルーティングテーブルに次のルールを追加しました。

ip route add unreachable default metric 100 table vpn

次のように進みます。

➜ ip route show table vpn
default dev tun0 scope link
unreachable default metric 100
192.168.100.0/28 dev eth0 scope link

したがって、デフォルトのルーティングテーブルがある場合はトラフィックが出ることがありますが、デフォルトのルーティングテーブルがないと、そのメトリックを持つルールが一致する100ため、インターネットにアクセスできなくなります。

テストを経て動作します。マニュアルページを指摘してくれたABとEduardoに感謝します。

関連情報