メモ的ななにか

@Maleic1618

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

*1

ホスト側の設定

ここまでやればホストとコンテナはつながっているので*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

*1:8.8.8.8はGoogleDNSサーバーです.

*2:pingを飛ばす場合はホスト→コンテナは192.168.122.2へ,コンテナ→ホストは192.168.122.1(=gateway)へ飛ばして確認します.

*3:chrootはネットワーク設定を変えないことを利用して,ホストのネットワーク設定を使ってインストールしています.