WiFi接続のノートで走らせているKVMにデスクトップからアクセスしてみた
橋本修太です
さて、突然ですが、今私のKubernetes環境はこんな感じになっています。
KVMは仮想マシン、KubicはopenSUSEのKubernetes専用ディストリビューション、masterやnodeはKubernetesクラスタでの役割を表しています。
ルーターに有線でデスクトップが繋がっていて、そこに3つKubicを走らせています。
また、ルーターはWiFiルーターに繋がっていて、WiFiでノートパソコンと通信、そのノートパソコンの上にも3つKubicが走っています。
それをですね、こうしたいのです。
デスクトップのnodeを、ノートパソコンのKubernetesクラスタに組み込みたいのです。
ノートパソコンは、メモリは16G積んでいて少し余裕はあるものの、CPUはcore i5で、KVMをこれ以上増やすのは難しいです。
そこで、クラスタの利点を活かして、デスクトップからnodeを引っ張ってくるわけです。
とりあえずこれでできました
KVMはデフォルトで閉じたネットワーク(ホストの外側からは中にアクセス出来ないネットワーク)を作成します。ただ、これはNATなので、ゲストからホストの外側にはアクセス出来ますが・・・
そこで、色々とやってみた結果、次のような方法でホストの外からのアクセスが出来ました。
- 【ノートPC】KVMでバーチャルネットワークを作成、マスカレードで接続
- 【デスクトップPC】ブリッジを作成
検証や調査等はおいおいやっていくとして、それぞれの設定を書いてみたいと思います。
今回は【ノートPC】編、次回は【デスクトップPC編】です
WiFi接続しているノートPCにブリッジを作成することに挫折
グーグル先生に教えてもらって、いくつかの方法を試したりしたのですが、どれも挫折してしまいました・・・
どうやら、ブリッジはレイヤー2で転送するものらしいのですが、WiFiはレイヤー2転送に対応していないというのが、WiFiでのブリッジ作成が難しい理由の大きなところらしいです。・・・いまいちピンとこないので、後ほど詳しく調べてみたいと思います。
parproutedやebtablesなどでレイヤー2転送を設定する
parproutedはarpをプロキシするものとの事です。また、etablesはEthernetフレーム用iptablesとの事です。parproutedはopenSUSE Leap15で上手く動かせられなかったり、ebtablesが意図した通り設定出来なかったりして、挫折してしまいました。
バーチャルネットワークを作成
Facebookでそんな事をなげいていたら、Saputro Aryuliant氏より、「KVMのバーチャルネットワーク設定して、iptablesでマスカレード設定すればいけるよ」とのお助けが。
「ホストPCの外から、ゲストPCにアクセスできる?」と聞くと、「iptables設定すればいけるよ」とのことでしたので、早速試してみることに。
KVMの設定
ルーティングでネットワークを作成します。
設定はvirt-managerでこんな感じです。
編集 > 接続の詳細
から、「仮想ネットワーク」タブを選んで、左下のプラスのアイコンをクリックして追加します。
デバイスにwlan0(WiFi)、方法にルーティングを指定している所がポイントです。
これ、デフォルトのNATネットワークだとだめなのかな?
iptablesの設定
まず、ノートPCでipv4のフォワードを有効にします。
sudo sysctl -w net.ipv4.ip_forward=1
これは再起動するとクリアされてしまいますので、常に設定したい場合は /etc/sysctl.d/の中に、{好きな名前}.confという名前で設定ファイルを作成して、その中に記述しておけばOKです。
確認は以下のコマンドで。
sudo sysctl -a
設定項目が表示されますので、grep -i forwardとかで絞ると楽に確認できます。
それから、同じくノートPCにマスカレードを設定します。
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
- -t nat パケット中のIPアドレスを書き換える用のテーブルを編集
- -A POSTROUTING 転送でパケットが出ていく時に処理を行う
- -s ここで指定した所から来た(Source)パケットに対する処理
- -j 指定した処理を行う 今回はマスカレード
これで、ノートPCの上で走らせているKVM上のKubicが、自由に外にアクセスできるようになりました。
ノートPCの上で走らせているKVMにデスクトップPCからアクセスする
とりあえず、アクセスしたいマシンやKVM上のKubicで、以下の設定を行いました。
ip -4 route add 192.168.100.0/24 via 192.168.0.12
192.168.100.0/24行きのパケットは、192.168.0.12(ノートPCのIPアドレス)をデフォルトゲートウェイにしてね、という設定です。
これで、デスクトップや、そこで走っているKVM上のKubicから、ノートPC上のKubicにアクセスできるようになりました。
・・・もちろん、デスクトップ上のKVMも、ブリッジ設定して、ホストの外へアクセスできるようにすれば、です。その様子はまた次回に。
感想&課題
- ネットワークの基礎が無いのでちょっときつい
- レイヤー2ルーティングでブリッジ作成は可能?
- そもそもルーティングによる接続ってなんだろう
- ホスト外からアクセスする方法がスマートでない
- この辺りをもうちょっとまとめたい