ホストでLXCコンテナ(10.0.3.2
)を実行しています。ポート7000
のコンテナー内でサービスが実行されています。
ホスト(10.0.3.1
、lxcbr0
)から、サービスにアクセスできます。
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
コンテナー内で実行されているサービスを、外部の世界からアクセスできるようにしたいと思います。したがって、ホストのポート7002
をコンテナのポート7000
に転送したいと思います。
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
結果は(iptables -t nat -L
)になります:
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
それでも、転送されたポートを使用してホストからサービスにアクセスできません。
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote Host: Connection refused
ここでバカなことを見逃しているような気がします。確認すべきことは何ですか?これらの状況をデバッグするための良い戦略は何ですか?
完全を期すために、ホストでのiptables
の設定方法を次に示します。
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
デフォルトポリシーがDROPであるため、10.0.3.1で7002ポートをブロックしているようです
INPUTルールに追加してみてください:
iptables -A INPUT -p tcp --dport 7002 -j ACCEPT
私は同じ問題に出くわしました。私はまだ解決策を見つけていませんが、いくつかの観察結果を書き留めました。
ホスト${Host}
マシン(Ubuntu 12.04)を使用しており、LXC経由でゲストマシンを実行しています。ゲストはIP 10.0.3.248
にあり、ゲートウェイは10.0.3.1
にあります。ゲストでWebサーバーを実行しており、トラフィックを${Host}:8888
から10.0.3.248:80
にポート転送したいと考えています。以下は、関連するiptablesエントリです。
-A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.248:80
-A POSTROUTING -j MASQUERADE
現在の構成では、別の物理マシンから10.0.3.248:80のWebサーバーに正常にアクセスできます。ただし、${Host}
から10.0.3.248:80にアクセスしようとすると失敗します。たぶん、あなたは別のマシンからLXC内のサービスにアクセスすることを試みることができます。
私の理解では、${Host}
からアクセスすると、パケットはループバックインターフェイスを経由してINPUTチェーンに直接入ります。 INPUTですべてを許可しますが、${Host}:8888
でリッスンするサービスはありません。 Wiresharkから、RSTが受信されて送信されるのがわかります。別の物理マシンからアクセスすると、パケットはPREROUTINGチェーンに入り、期待どおりにDNATされました。
関連する投稿の1つ:
はい、2018年からの5セント:
LXCをインストールして遊んでみました。私のコンテナIPは10.0.0.10
私はこのルールを追加しました:
iptables -t nat -A PREROUTING -p tcp -i ens192 --dport 81 -j DNAT --to-destination 10.0.0.10:22
うまくいきませんでした。その後、私は、FORWARDポリシーでさえACCEPTであることに気づき、すべてのFORWARDをブロックするルールがあることを認識しました。
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * virbr0 0.0.0.0/0 10.0.0.0/24 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- virbr0 * 10.0.0.0/24 0.0.0.0/0
0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
5 268 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
だから私は上部にルールを注入する必要がありました:
iptables -I FORWARD -p tcp -d 10.0.0.10 --dport 22 -j ACCEPT
次に進むHost:81
-> 10.0.0.10:22
機能します。
FORWARDルールを追加する必要がありました
iptables -A FORWARD -p tcp -d 10.0.3.2 --dport 7002 -j ACCEPT