web-dev-qa-db-ja.com

LXC、ポート転送、iptables

ホストでLXCコンテナ(10.0.3.2)を実行しています。ポート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
8
Roberto Aloi

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

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

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

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

ホスト${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つ:

1
user199716

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

0
Nick

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

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