LXC NAT はホストポートをコンテナに転送します。

LXC NAT はホストポートをコンテナに転送します。

コンピュータにLXCをインストールしましたDebian/sidそして提示/amd64コンテナ

sudo apt-get install lxc debootstrap libvirt-clients \
                libvirt-daemon-system ebtables dnsmasq

sudo lxc-create -t /usr/share/lxc/templates/lxc-debian -n debian

その後、ブリッジを起動します。

sudo virsh net-start default

これにより、2つのネットワークが作成されます。virbr0後で作成されると、そのネットワークが使用され、IPはdhcpによって割り当てられます。virbr0-nicveth94ECU1lxc-start192.168.122.0/24

コンテナは正常に起動し、ホストに到達することができ、その逆も同様です。 pingを送信でき、実行中のWebサーバーがある場合は、ホストのブラウザを使用してアクセスできます。

virsh net-startまた、いくつかのルールを追加しますiptables(ホストで実行されるファイアウォールがないため、デフォルトではすべてが空ですACCEPT)。

iptables -L後ろにnet-start

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

iptables -L -t nat後ろにnet-start

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
RETURN     all  --  192.168.122.0/24     base-address.mcast.net/24 
RETURN     all  --  192.168.122.0/24     255.255.255.255     
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24    

/proc/sys/net/ipv4/ip_forwardはい1

今、私は特定のホストポートをコンテナにNATしたいと思い、解決策を見つけました。オンラインのすべてが同じ方向を指しているようです。次のように動作する必要があります。

iptables -A PREROUTING -t nat -p tcp --dport $HPORT -j DNAT --to $VRIP:$VRPORT
iptables -A FORWARD -p tcp -d $VRIP --dport $VRPORT -j ACCEPT

しかし、そうではありません。私は何を見逃していますか?

修正する

この投稿の後、lxc-nat / virsh net-start(virbr0)からホストnat(br0)に切り替えました。eth0をbr0に変換し、LXCまたはLXDをLANに接続します。

動作します。コンテナはdhcpを介してLANルータからIPを取得し、同じネットワーク上にあります。これは、ルータがNATポートを介してのみLANアドレスを転送できるため便利です。

簡単に言えば、次のようにbr0インターフェースを作成します/etc/network/interfaces

auto br0
iface br0 inet static
    address 192.168.2.210
    netmask 255.255.255.0
    network 192.168.2.0
    broadcast 192.168.2.255
    gateway 192.168.2.1
    bridge-ifaces eth0
    bridge-ports eth0
    up ifconfig eth0 up

iface eth0 inet manual

lxc.network.link = br0その後、コンテナ構成で使用します。

しかし、ホストブリッジを使用せずに特定のポートのみをNATする方法を知っている人がいる場合は、教えてください。

ベストアンサー1

nfttablesを使用している場合は、LXCが外部世界にアクセスできるようにnatを設定する必要があります。

table ip lxc {
    chain postrouting {
        type nat hook postrouting priority srcnat; policy accept;
        ip saddr 10.0.3.0/24 ip daddr != 10.0.3.0/24 masquerade
    }
}

インターネットから内部にNATするには、たとえば、インターネットのポート2222をlxcコンテナのポート22として使用します。事前ルーティングチェーンからナットテーブル。

table ip nat {
    chain prerouting {
        type nat hook prerouting priority dstnat; policy accept;
        iifname "eth0" meta l4proto tcp ip daddr $public_ip tcp dport 2222    dnat to $my_lxc_ip:22
    }
}

おすすめ記事