Quantcast
Channel: Planet Debian JP
Viewing all articles
Browse latest Browse all 2218

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

$
0
0

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 の悲鳴

が解決された様です.

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


Viewing all articles
Browse latest Browse all 2218

Trending Articles