LXCコンテナのネットワーク設定
友人に教えてもらいながらあれこれいじったらつながったので,やり方をまとめておきます.
使っているのはDebian jessieです.
コンテナは既に作成できているとして進めます.
ブリッジを作成する
nm-connection-editorを使いました.
(MATEの場合はパネルのシステム-設定-ネットワークの設定でもOK)
追加ボタンからブリッジを作成し,編集でIPv4のセッティングを開き,方式を手動に変更. アドレスを追加して以下のように設定.
アドレス:192.168.122.1
ネットマスク:255.255.255.0
ゲートウェイ:0.0.0.0
コンテナ側のネットワーク設定
/var/lib/lxc/myjessie/下の以下のファイルをいじります.
- config
- rootfs/etc/network/interfaces
- rootfs/etc/resolv.conf
以下を追加. config:
lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.ipv4 = 192.168.122.2/24 lxc.network.ipv4.gateway = 192.168.122.1
/rootfs/etc/network/interfaces:
auto eth0 # iface eth0 inet dhcp iface eth0 inet static address 192.168.122.2 netmask 255.255.255.0 network 192.168.122.0 broadcast 192.168.122.255 gateway 192.168.122.1
/rootfs/etc/resolv.conf:
nameserver 8.8.8.8
ホスト側の設定
ここまでやればホストとコンテナはつながっているので*2,コンテナが外にアクセスできるようにします.
まずetc/sysctl.confの次の行のコメントアウトを削除.
#net.ipv4.ip_forward=1
その後,iptablesでNATを以下のように設定. 予めnetfilter-persistentをインストールしておくこと.
% sudo iptables -A FORWARD -i br0 -s 192.168.122.2/24 -m conntrack --ctstate NEW -j ACCEPT % sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT % sudo iptables -t nat -A POSTROUTING -s 192.168.122.2/24 -j MASQUERADE % sudo iptables-save % sudo /etc/init.d/netfilter-persistent save % sudo /etc/init.d/netfilter-persistent restart
これでコンテナから外にアクセスできると思います.
参考
以下の記事を参考にさせていただきました.ありがとうございます.
NetworkManager で仮想環境用に bridge を作成
おまけ:コンテナにpingをインストール
コンテナにpingがインストールされてなくて,困っている方も多いのではないでしょうか.コンテナのネットワークが設定できていなくても,chrootを使えばインストールできます.*3
% sudo chroot /var/lib/lxc/myjessie/rootfs % apt-get install iputils-ping