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