LXC、ポート転送、iptables


8

10.0.3.2ホストでLXCコンテナ()を実行しています。ポート上のコンテナー内でサービスが実行されています7000

ホスト(10.0.3.1lxcbr0)から、サービスにアクセスできます。

$ 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

INPUTチェーンをチェックしましたか?たぶんポリシーはREJECTそこにあります。
MichaelHärtl2013年

ポリシーはACCEPT
Roberto Aloi 2013年

すみません、私はFORWARDチェーンを意味していました。また、IP転送が有効になっているかどうかを確認しますcat /proc/sys/net/ipv4/ip_forward
MichaelHärtl2013年

ip_forwardに設定されています1
Roberto Aloi 2013

FORWARDポリシーもACCEPT
Roberto Aloi

回答:


3

デフォルトのポリシーがDROPであるため、10.0.3.1で7002ポートをブロックしているようです

INPUTルールに追加してみてください:

iptables -A INPUT -p tcp --dport 7002 -j ACCEPT

1

私も同じ問題に遭遇しました。私はまだ解決策を見つけていませんが、いくつかの観察結果を書き留めました。

ホスト${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サーバーに正常にアクセスできます。ただし、から10.0.3.248:80にアクセスしようとすると失敗します${host}。たぶん、あなたは別のマシンからLXC内のサービスにアクセスすることを試みることができます。

私の理解では、からアクセスする${host}と、パケットはループバックインターフェイスを通過し、INPUTチェーンに直接入ります。INPUTですべてを許可しますが、でリッスンするサービスはありません${host}:8888。Wiresharkから、RSTが送信されて受信されるのがわかります。別の物理マシンからアクセスすると、パケットはPREROUTINGチェーンに入り、期待どおりにDNATされました。

関連する投稿の1つ:


0

FORWARDルールを追加する必要がありました

iptables -A FORWARD -p tcp -d 10.0.3.2 --dport 7002 -j ACCEPT

0

はい、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機能します。


-2

コンテナは、ホストブリッジインターフェースを介してLANからアクセスできるため、ホストと同じサブネットに接続されます。

ルーターにこれらのポートをコンテナに転送させる必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.