コンピュータに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-nic
veth94ECU1
lxc-start
192.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
}
}