平衡点


2014/12/18

_ NetworkManager で仮想環境用に bridge を作成

始めに

ラップトップでは上流のネットワークが有線だったり無線だったりで、ちょっと面倒ですね.

virt-managerなんかでdnsmasqを用いたNATネットワークを使うと,この辺上手くやってくれるので大分楽なんですけれど,

  1. そもそも,ホスト環境であるラップトップ側で dnsmasq は既に動いているので,virt-manager から dnsmasq が二重に上がる.別に何か問題がある訳じゃないけれど,気にいらない.
  2. 仮想環境側のアドレスがコロコロと変わるのがちょっと.dnsmasq の dhcpd 機能で IP を渡しているのだけれども,仮想MACアドレスに対応して固定のIPを振ったとしても,lease time が過ぎると毎回アドレス取得している感じ.

といった点が気になっていました.

そんな訳で,矢吹さんのノートPCで、LXCを運用するときのTIPS - Yukiharu YABUKI の tDiary(2011-10-30)を参考に bridge インターフェースを作成して iptables で NAT する様にしてみたのですが,今度は仮想環境側を落とした後に NetworkManager が

(プロセス番号) libnm-glib-WARNING **: Error in get_property: Method "Get" with signature "ss" on interface "org.freedesktop.DBus.Properties" doesn't exist

と悲鳴を上げる様になりました.

さて,どうするか,…としばし悩みましたが,良く見たら NetworkManager でも bridge を管理できるみたいで.試しに NetworkManager 側で bridge を作成してみたら上記の悲鳴は出なくなりました.というわけで,その手順のメモなど.

環境は

% lsb_release -a
LSB Version:   (略)
Distributor ID: Debian
Description:    Debian GNU/Linux 8.0 (jessie)
Release:        8.0
Codename:       jessie

となっています(…が,sid です.良く見たら /etc/debian_version も 8.0 になってるな.freeze 期間だからかしら).Wheezy の NetworkManager でもブリッジって作成できるのかしらん?

NAT の設定

iptables で,bridge から現在接続されている上流(eth0 or wlan0) への NAT を設定します.

先ず /etc/sysctl.d/ 以下に適当なファイル名(vm-forward.conf としました)で以下の内容を記載しておきます.

net.ipv4.ip_forward=1

その後

% sudo sysctl -p

で設定を反映.

次に,iptables で

% sudo iptables -A FORWARD -i [bridge name] -s XXX.XXX.XXX.0/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 XXX.XXX.XXX.0/24 -j MASQUERADE
% sudo iptables-save
% sudo /etc/init.d/netfilter-persistent

として,iptables の設定を更新します. XXX.XXX.XXX.0/24 はブリッジに振る/仮想マシンに振る IP 空間, [bridge name] は作成する bridge インターフェースの名前です.

以上で,ブリッジインターフェースからの接続を上流に IP Masquerade できるようになります.

NetworkManager でブリッジの作成

nm-connection-editor で作成するのが楽です.自動起動にチェックを入れておくと,常にブリッジインターフェースが存在するので,ホストがネットワークに接続されていない場合でも仮想環境とは通信が可能です.

ちなみに,ログ見てたら /usr/bin/arping を実行しようとしていました. とりあえず /usr/sbin/arping からの symbolic link を貼っておきましたが, これ Bug なのかしら…?

virt-manager, lxc での設定

virt-manager で作成した仮想ネットワークは削除して,仮想マシン側で NIC に作成したブリッジを割り当てておきます.

lxc でコンテナを作成する際には

lxc.network.type=veth
lxc.network.link=[bridge name]
lxc.network.flags=up

としておけば良いかと.

まとめ

というわけで,気になっていた

  1. dnsmasq の二重起動
  2. 仮想環境側の IP を固定
  3. NetworkManager の悲鳴

が解決された様です.

外界と仮想環境とを接続したい,と思ったら一手間かける必要がありそうですが,とりあえずこれで運用して,どうなるか試してみます.


連絡先など
最近の日記
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|
Back to Top ▲