
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
ます。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
TCPダンプディスプレイにトラフィックがありませんtun0
。
また、ほぼ同じことを試しましたが、TAPデバイスを使用しました。ブリッジを使用brctl
、追加、作成しましたが、パケットを受信できず、すべてがうまく機能します。 TUNの場合は効果がありません。エラーはどこにありますか?tap0
enp5s0
tap0
enp5s0
default 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に追加しました後に接続しようとするなど、再ルーティングされるエントリに追加の制限を追加することをお勧めします。注意しないと、コンピュータから自分自身を完全に除外できます。