web-dev-qa-db-ja.com

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

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

まず、コマンドで転送を有効にします

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に移動させたいので、iptablesを使用する必要があります。 enp5s0から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

tcpdumpは、tun0にトラフィックを表示しません。

また、ほぼ同じことを試しましたが、TAPデバイスを使用しました。 brctlを使用してブリッジを作成し、tap0enp5s0を追加しましたが、tap0がパケットを受信せず、enp5s0を使用しても問題ありませんでした。 TUNの場合、default gw 10.1.8.5などは機能しません。間違いはどこですか?

2
Nikita Zeulin

Iptablesコマンドでは、入力インターフェースと出力インターフェースが逆になります。

彼らはする必要があります:

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

そして:

Sudo iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE
1
BrendanMcL