enp7s0 から localhost:80 にポート転送する方法

enp7s0 から localhost:80 にポート転送する方法

かなり混乱していて全く理解できませんiptables

私はnginxサーバーをリッスンしていてlocalhost:80、NICのIPでアクセスしたいです192.168.29.167:80。私は次のようにしていましたデジタルオーシャンルールの設定に関するチュートリアル。

私の:

タイプ インターフェース 住所
local lo 127.0.0.1
NIC lan enp7s0 192.168.29.167

やった、

iptables -A FORWARD -i lo -o enp7s0 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i lo -o enp7s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp7s0 -o lo -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 127.0.0.1 -j SNAT --to-desitnation 127.0.0.1

PREROUTING、ルールを設定してPOSTROUTINGも何も起こりませんでした。からFORWARDアクセスできません。localhost:80enp7s0

(注:私は持っていますsudo sysctl -w net.ipv4.ip_forward=1

答え1

  1. ルールにエラーがありますnat。インターフェース名が間違っているようです。DNAT入力インターフェース名ではなく、宛先アドレスに基づいたルールを使用することをお勧めします。したがって、必要なことを実現するには、1 つのルールのみが必要です。
iptables -t nat -A PREROUTING --dst 192.168.29.167 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:80
  1. これらのパケットは転送 (通過) されませんが、入力されます。このトラフィックはfilter/INPUTではなく、チェーンで許可する必要がありますfilter/FORWARD。アクション後、DNAT入力インターフェイスは変更されないことに注意してください (したがって、enp7s0ではなく、インターフェイスを指定する必要がありますlo)。ただし、単一のルールで任意の接続を許可できますDNAT
iptables -t filter -A INPUT -m conntrack --ctstate DNAT -j ACCEPT
  1. を実行してsysctl -w net.ipv4.conf.enp7s0.route_localnet=1、 宛てのパケットを外部から受信できるようにします127.0.0.1
  2. iptables-save -cカウンターを含む完全なルール セットを一覧表示するには、コマンドを使用することをお勧めします。nat/PREROUTING少なくとも、ルール カウンターの増加を確認できるはずです。また、を使用してiptables-apply新しいルールを適用します。これらのユーティリティのドキュメントを確認してください。
  3. tcpdump -ni enp7s0 'tcp port 80'外部からのトラフィックのトラブルシューティングには を使用します。
  4. ローカルで発生したトラフィックをリダイレクトするには、次のルールを使用する必要があります。
  iptables -t nat -A OUTPUT -p tcp --dport 80 --dst 192.168.29.167 -j DNAT --to 127.0.0.1

そうしないと、サーバー自体から 192.168.29.167 アドレスを介して nginx に接続できなくなります。

関連情報