ethからTUN / TAPにトラフィックを転送できません。

ethからTUN / TAPにトラフィックを転送できません。

enp5s0物理インターフェイスから仮想インターフェイスにトラフィックを転送しようとしていますtun0。目標は基本的にtun0から来るすべてのパケットを受信することですenp5s0

まず、次のコマンドを使用して転送を有効にしました。

sudo sysctl -w net.ipv4.ip_forward=1

その後、tun0実行して作成しました。

sudo ip tuntap add dev tun0 mod tun

IPアドレスを割り当ててデバイスの電源を入れます。

sudo ifconfig tun0 10.1.8.5 netmask 255.255.255.0 promisc up

enp5s0からのすべてのパケットが必要なので、使用する必要がありtun0ます。iptablesenp5s0からへの転送を許可するルールを作成する必要があるため、tun0コマンドは次のようになります。

sudo iptables -A FORWARD --in-interface tun0 --out-interface enp5s0 -j ACCEPT

次に、次を実行してNATを有効にしました。

sudo iptables -t nat -A POSTROUTING --out-interface enp5s0 -j MASQUERADE

TCPダンプディスプレイにトラフィックがありませんtun0

また、ほぼ同じことを試しましたが、TAPデバイスを使用しました。ブリッジを使用brctl、追加、作成しましたが、パケットを受信できず、すべてがうまく機能します。 TUNの場合は効果がありません。エラーはどこにありますか?tap0enp5s0tap0enp5s0default gw 10.1.8.5

答え1

iptables コマンドでは、入出力インターフェイスが反転されます。

彼らは次のようになります。

sudo iptables -A FORWARD --in-interface enp5s0 --out-interface tun0 -j ACCEPT

そして:

sudo iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE

答え2

問題は、パケットがそのインターフェイスに入るようにすることです。これはルーティングまたはiptablesを介して行うことができます。

最初のテスト:自分のホストから次のようにpingを送信します10.1.8.57。 tcpdumpに表示する必要があります。これをしないと、他の何も機能しません。だから修正してください。

ルーティングから始めてください。すでに作成されているホストのton0の反対側にネットワークを宣言します10.1.8.0/24。 enp5s0リンクの反対側にあるホストにエントリを配置してホストにルーティングします。そのホストから次のようにpingを送信します10.1.8.57。これはtcpdumpに表示する必要があります。

iptablesに移動します。この場合、必要なのは通常、ホストに送信されるパケットを取得し、TUNインターフェイスに転送することです。これを達成する秘訣はDNATルールです。私の考えには次のようになります。

iptables -t nat -A PREROUTING --in-interface enp5s0 -j DNAT --to-destination 10.1.8.57
iptables -t nat -A OUTPUT --in-interface enp5s0 -j DNAT --to-destination 10.1.8.57

(実際には、このターゲットはPREROUTINGとOUTPUTの両方で動作します。使用時には明らかに両方に適用されます。両方が必要か、1つだけが必要なのか、それとも異なる場合があるのか​​わかりません。)初期テストのために-p tcp -m tcp --dport 5000ポート5000に追加しました後に接続しようとするなど、再ルーティングされるエントリに追加の制限を追加することをお勧めします。注意しないと、コンピュータから自分自身を完全に除外できます。

関連情報