
この質問は数多く提起されました。数週間前に私はこれを行うことができました。これServerFaultが公開これデジタルオーシャンブログ投稿。私は簡単なものを見逃す必要があります。
私の目標は、NATを実行する2つのインターフェイス間でパケットを転送することです。特にパブリックインターフェイスと外部USB NICの間でパケットを転送したいと思います。
ポート転送を許可するようにカーネルが設定されていることを確認しました。
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
インターフェイスごとの転送設定は次のとおりです。
net.ipv4.conf.enp0s20u4u3.forwarding = 1
net.ipv4.conf.eno1.forwarding = 1
私が作成したルールはiptables
次のとおりです。
iptables -t nat -A PREROUTING -i eno1 --protocol tcp --destination-port 10000 -j DNAT --to-destination 192.168.10.2:1234
iptables -A FORWARD -i eno1 -o enp0s20u4u3 --protocol tcp --destination-port 1234 -j ACCEPT
iptables -t nat -A POSTROUTING -o enp0s20u4u3 --protocol tcp --source 192.168.10.2 --source-port 1234 -j SNAT --to-source 192.168.10.1
次に、ポート10000を介してTCP接続を確立してこの構成をテストしました(外部IPが192.168.2.50の場合)。
$ nc -v 192.168.2.50 10000
nc: connect to 192.168.2.50 port 10000 (tcp) failed: Connection refused
私のルールエントリが正しくない場合、この動作は意味があります。だからルール統計を捨てました。
$ iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 15 packets, 2885 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- eno1 any anywhere anywhere tcp dpt:ndmp to:192.168.10.2:1234
Chain INPUT (policy ACCEPT 15 packets, 2885 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT tcp -- any enp0s20u4u3 192.168.10.2 anywhere tcp spt:search-agent to:192.168.10.1
したがって、着信TCPパケットは最初のチェーンルールと一致しませんPREROUTING
。エラーがどこにあるのかよくわかりません。最初のルールはとても簡単です。アイデアは次のとおりです。
192.168.2.50:10000 へのインバウンド トラフィックは、プライベート インターフェイスで 192.168.10.2:1234 への NAT です。