転送する前に、TUNデバイスを介してすべてのパケットをルーティングします。

転送する前に、TUNデバイスを介してすべてのパケットをルーティングします。

TUNデバイスを作成し、そのインターフェイスに入ってくるすべてのパケットをチェックし、スキャンが成功すると、変更されずにTUNに書き換えるアプリケーションがあります。 (ファイアウォールについて考えてください)パケットのソースは、ファイアウォールアプリケーションを実行するのと同じデバイスです。このシステム(VM、)は、デフォルトのルーティングテーブルを使用して10.0.2.15他のシステム(ホスト、)に接続できます(設定は不要)。192.168.1.151今私の問題は、ファイアウォールアプリケーションを介してパケットを送信するたびにカーネルがパケットを破棄するようです。具体的には、TUNインターフェイスでtcpdumpを実行すると、次のようになります。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
12:24:21.548119 IP 10.0.2.15 > 192.168.1.151: ICMP echo request, id 9967, seq 1, length 64
12:24:21.548248 IP 10.0.2.15 > 192.168.1.151: ICMP echo request, id 9967, seq 1, length 64
12:24:22.555972 IP 10.0.2.15 > 192.168.1.151: ICMP echo request, id 9967, seq 2, length 64
12:24:22.556087 IP 10.0.2.15 > 192.168.1.151: ICMP echo request, id 9967, seq 2, length 64

各パケットが2回記録されることがわかります。私のアプリに入るときは一度、アプリから出るときは一度。しかし、そこからそれは消えるように見えた。私のホストに出ることになっているインターフェイスでtcpdumpを実行すると、何も表示されません。

私の仮想マシンで以下を設定しました。

# enable forwarding and disable reverse path filtering
sudo sysctl net.ipv4.conf.default.rp_filter=0
sudo sysctl net.ipv4.conf.all.rp_filter=0
sudo sysctl net.ipv4.ip_forward=1

# routes for the packets to take
sudo ip rule add to 192.168.1.151/32 lookup 11 prio 11
sudo ip rule add iif tun0 lookup main priority 10

表 11 に TUN デバイスに着信するパケットを示します。動作原理はtcpdumpに示されています。

また、iptables FORWARDおよびOUTPUTチェーンをデフォルトでACCEPTに設定しました。また、パケットがリターンパスを見つけることができない問題を排除するために、UDPとnetcatを使用してトラフィックをテストしました。

私は何を見逃していますか?カーネルが私のパケットをドロップするのはなぜですか?

答え1

TUNデバイスを作成し、そのインターフェイスに入ってくるすべてのパケットをチェックし、スキャンが成功すると、変更されずにTUNに書き換えるアプリケーションがあります。

今私の問題は、ファイアウォールアプリケーションを介してパケットを送信するたびにカーネルがパケットを破棄するようです。

カーネルは、自分が送信するパケットが入ってくるのを見て、ネットワークのどこかにルーティングループがなければならないと結論付け、ネットワークがフラッディングされるのを防ぐためにパケットを破棄します。

この動作を無効にしてみましたが、TUNインターフェイスにローカルアドレスがあるため、rp_filterこれを設定する必要があります。accept_local

より良いアプローチは、実際にアプリケーションをファイアウォールとして使用し、2つのTUNインターフェイス(受信と送信)を作成し、その両方または両方を必要なネットワークネームスペース/ VMに移動することです。

これにより、ルーティングループのように見えることを回避できます。

関連情報