Docker + SoftetherVPNでマイクロサーバーを構築する

自分用メモです.

 

1.マシンの用意

Ubuntsu server 16.04LTSを適当なマシンにインストールする

 

2.Dockerをいれる,ユーザーグループを作る

wget -qO- https://get.docker.com/ | sh
sudo usermod -aG docker user
ログインし直す

https://tracpath.com/works/devops/how_to_install_the_docker/

 

3.Softether VPN ServerのよろしいDockerイメージを取ってくる

docker pull frosquin/softether
docker run -d –net host –cap-add NET_ADMIN –name softether frosquin/softether

https://github.com/cnf/docker-softether

VPN Serverに対するSSH接続を行えるようにしたい場合は,
権限付与が—cap-add NET_ADMIN では足りないので,–privileged にするとよい.
あんまりセキュアじゃないけど.

 

4.Dockerの操作

よく使うのは
docker images
docker ps
docker start <NAME>
docker commit <NAME> <IMAGE_NAME:TAG>
docker exec –it <NAME> /bin/sh

http://qiita.com/butada/items/3e6cd338cb703eef64b4
http://qiita.com/ZON009/items/7de6d36cad4eeb9727ef

ここで作ったコンテナの名前は便宜上softetherとする.

 

5.Softether Serverの設定

softetherのコンテナに入って,./vpncmdを叩き,その中で設定を行なう.

↓これの仮想HUB作成からやればOK
http://qiita.com/Makotonton/items/18683a9f1e846433c035

↓vpncmdはマニュアルを見ながらやればOK
https://ja.softether.org/4-docs/1-manual/6/6.1

大まかに,
・最初はHub名を空にするなどしてServer設定のところに入る
・仮想HUBを作る(HubCreate)
・Hubコマンドで任意の仮想Hubの設定に入れる
・作った仮想HUBに対してユーザーを作るなどする (UserCreate,UserPasswordSetなどをする)
・グローバルIPがない場合はVPN AzureをONにする.
ここまでやればServerに繋ぎに行ける.
SSHしたい場合は6の手順もこの時やっておく.

 

6.ServerにSSHするための設定

どうやらLinuxの制約でVPN Serverを動かしているマシンにSSHは普通にやるとできないみたい.
そこで,VPNのネットセグメントと物理イーサのセグメントをブリッジ接続する.
下準備として,apt-getでbridge-utilsを入れておく.これでbrctlコマンドが使えるようになる

まず,br0とVPNを繋ぐための仮想NIC,tap_br0 を作成する.再びsoftetherのコンテナに入って
・Hubの設定から,SecureNAT機能をオフにする(SecureNatDisable)
・Serverの設定から,作った仮想Hub→br0へのブリッジ接続を作成する(BridgeCreateコマンドを使う.tapをyesするのを忘れずに.)
を行なう.
コンテナから出てifconfig(ip a)すると,eth0,lo,docker0に加えてtap_br0が増えているはず.
この時点ではまだ仮想ブリッジ(br0)を作成してないが,できたら勝手につながるので大丈夫.

次にホストで仮想ブリッジbr0を作り,eth0↔br0,br0↔tap_br0を作る.

$ sudo ifconfig eth0 0.0.0.0 promisc up
$ sudo brctl addbr br0
$ sudo brctl addif br0 eth0 tap_br0
$ sudo ifconfig br0 <元のeth0のIP> netmask <元のeth0のサブネットマスク> up
$ sudo route add default gw <元のeth0のデフォルトゲートウェイ>

これで,ローカルネットワークに面した物理イーサネットアダプタ(eth0)と,VPNに面した仮想イーサーネットアダプタ(tap_br0)が
br0を介して繋がった.eth0でなくbr0に対してIPアドレスが振られており,このIPは双方のネットワークにアクセスできる.

SecureNATをoffにするのは,VPNネット↔VPN Serverが繋がってるローカルネットでブリッジ接続をしたときDHCPサーバーが
ローカルネット側とVPN側で二つになってしまうため.(ONにして試すと,一瞬つながるがすぐ落ちる.)
VPN ServerがつながっているネットワークにDHCPサーバーがいない場合は,ONにしてよいのかも?

 

http://linux2.g.hatena.ne.jp/lnznt/20120527/1338047140
http://www.petapico.biz/%E3%83%A9%E3%82%B8%E9%A4%A8petapicoshop/softether-vpn%E3%81%A7%E5%A4%96%E3%81%8B%E3%82%89-irmagician-%E3%82%92%E5%88%B6%E5%BE%A1%E3%81%97%E3%81%A6%E3%82%A8%E3%82%A2%E3%82%B3%E3%83%B3%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B/
http://qiita.com/neronplex/items/84162ec1de520bb75a11

 

8.VPN ClientからVPN接続し,SSHできる

VPN Clientでの設定は割愛.ホストを指定し,手順5のvpncmdで設定したユーザー名とパスワードでログインできる.

接続時,VPN Serverが置いてあるネットワークのDHCPサーバによってIPは割り振られる.

Serverのアドレス(192.168.-)をメモっておくか,arp -aとかでIPを調べてSSHできる.

 

7.余ったマシンを作ったサーバーにぶら下げまくれば計算クラスタが作れるぞ

Docker難しかった.一度イメージを作ってしまうと使いまわせるのでべんり.

 

8.その他備忘録

・docker runで,—net hostとしたばあい,そのコンテナは(多分)docker0を使わず,直接eth0を使う.
・マシンによっては(?)eth0がenp0s25とかになっていることがある.
・arp –a ローカルネットのIP一覧を教えてくれる.つまるところPCが保持しているARPのためのテーブルを見せてくれる
・ifconfigは非推奨だそうで.ip aを使うと良い(ハイフンは不要).
・デフォルトゲートウェイ:
サブネットマスク外のIP宛のパケットを送る相手.とりあえず全部こいつに送ってよろしくしてもらう.
この設定が間違っていると,外へのpingは通らなくなる.
サブネットマスク内のパケットは,ARP(Address Resolution Protocol)によって送信者が物理アドレスを知っている.
・サブネットマスク:
つまるところ,パケットをゲートウェイに送るか,ローカルネットに送るかを決定するために使っている.
・TAPデバイス:
つまるところ,仮想のイーサネットアダプタ.
VPN ServerはPCのeth0を勝手に使って仮想的なネットワークを構築するが,eth0に対して(ネットワークの)ポートを持っているわけではない.
eth0とVPNを繋ぐ一つの方法はeth0へのブリッジ接続の作成だが,この場合IPはeth0に振られているのでVPNからeth0側にはアクセスできない(Linuxの制約).
VPN側に仮想イーサーネットアダプタを作り,それとeth0の間をブリッジしてブリッジにIPを振れば,二つのネットワークを繋げられる.
・NAT : Network Address Translation
・当たり前なんだけど,既存の帯域の一部をVPNが食うので,無線などで速度がでない環境下でVPNに繋ぐと既存のネットも重くなる.

未だにifconfigで出てくる状態の中にわからないものがあるので追々調べる.

0 Comments

Leave a Reply

Your email address will not be published.