VyOSでプライベートIPの自宅ネットワークにリモートアクセスしたい！(環境構築編)

我が家はマンション専用プロバイダと契約していることもあり、DHCPでプライベートIPアドレス(10.XXX.YYY.ZZZ/22)がマンション側で管理している機器から振ってくる。そのため、外部から自宅にリモートアクセスするには別のグローバルIPがもらえるプロバイダとの契約しかないと思っていた。
しかし、その打開策を考えたので今回はそのネットワーク環境を構築していく。

#ネットワーク図
![自宅VPN_ネットワーク図.jpg](https://qiita-image-store.s3.amazonaws.com/0/161771/83cebe87-11c4-2f17-25b6-1a84113d3332.jpeg)
簡単な説明としては、さくらクラウドにVyOS(グローバルIP付き)を一台立てて、それと自宅のVyOSをVPN(OpenVPN)で接続する。また、外部から接続する場合は、さくらクラウドのVyOSにVPN(L2TP over IPsec)で接続する。これによって、リモートでのSSHアクセス等が可能になる。
その構築を「環境構築編」,「OpenVPN編」,「L2TP over IPsec編」と3つの記事で説明する。

* [環境構築編](http://qiita.com/nl0_blu/items/3094785d6234c47da911)
* [OpenVPN編](http://qiita.com/nl0_blu/items/03257d48e5dbda57c1c0)
* [L2TP over IPsec編](http://qiita.com/nl0_blu/items/90188adbadc8600d08a5)

# 環境構築編
本記事では、さくらクラウド及び自宅のVyOSの環境構築について説明する。中級者向けでサクサク書きます。

# さくらクラウドのVyOS
※アカウント等を持っていない方は登録の上、利用をお願いします。
以下のようにVyOSの環境構築をしていく。

## サーバ追加
<img width="1038" alt="スクリーンショット 2017-08-14 22.38.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/161771/f4a54846-5bc3-d0b2-271b-24d444df4711.png">
  
サーバプラン：1GB / 1仮想コア
ディスクプラン：20GB SSDプラン
パスワード等は任意

最後に[作成]ボタンを押す！

## VyOS設定
eth0やdefault gateway等の設定は初期では入っているので、それを確認(show configuration)した上で以下のコマンドを入力。
[VyOSユーザガイド](http://wiki.vyos-users.jp/ユーザーガイド)を参考すると良いです。

※ さくらクラウドのwebコンソールを使って、`set service ssh port 22`だけ設定し、他はPCでSSH接続で作業した方が早いです。

```
# 設定モードに入る
configure

# eth0にNATの設定を行う
set nat source rule 100 outbound-interface eth0
set nat source rule 100 translation address masquerade

# リモート管理用にSSHを有効にする
set service ssh port 22

# タイムゾーンの設定
set system time-zone Asia/Tokyo

# 変更のコミットおよび設定保存
commit
save
```

設定後、念のため外部との接続性を確認

```
$ ping example.com
```

# 自宅のVyOS
自宅のVyOSを用意するために、今回はマンションのネットワークに繋がった汎用サーバ(Ubuntu16.04)上にKVMでVyOSを作成する。作成したVyOSはbridge接続を利用して自宅のルータとして動作させる。

## KVMの環境構築

* 必要パッケージのインストール

```
$ sudo apt-get install qemu-kvm libvirt-bin virtinst
```

* Network Managerの無効化  
Network Managerはbridgeに対応していないため無効化する。

```
$ sudo systemctl stop NetworkManager.service
$ sudo systemctl disable NetworkManager.service
```

* virbrの無効化  
KVMにVMを立てるとvirbr接続になるが、今回はbridge接続なので無効化する。

```
$ sudo virsh net-destroy default
$ sudo virsh net-autostart default --disable
```

ここらで一旦再起動。。。。

* /etc/network/interfacesの編集  
自身の環境に応じてネットワークのaddress等の設定をする。
以下、/etc/network/interfacesの例

```
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
up /sbin/ifconfig eth0 promisc up

auto eth1
iface eth1 inet manual
up /sbin/ifconfig eth1 promisc up

auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 1

auto br1
iface br1 inet static
address 192.168.10.2
network 192.168.10.0
netmask 255.255.255.0
broadcast 192.168.10.255
gateway 192.168.10.1
bridge_ports eth1
bridge_stp off
bridge_maxwait 1
```
networkingの再起動

```
$ sudo systemctl restart networking.service
```

## VyOS仮想マシンをKVM上に構築

[vyos.io](http://packages.vyos.net/iso/release/1.1.7/)からVyOSのイメージをダウンロードする。また、作成場所は任意だが今回は`/kvm`ディレクトリに作る。

```
$ mkdir /kvm
$ cd /kvm
$ wget http://packages.vyos.net/iso/release/1.1.7/vyos-1.1.7-i586.iso
$ chmod 644 vyos-1.1.7-i586.iso
```

* vyos用の仮想ディスクファイルをストレージ2GBとして作成

```
$ qemu-img create -f qcow2 /var/lib/libvirt/images/vyos.qcow2 2G
```

* イメージを利用して仮想マシンを起動していく  
(メモリ512MB,CPUコア数1,bridge1・2接続の指定)

```
$ virt-install \
  --name=vyos \
  --disk path=/var/lib/libvirt/images/vyos.qcow2 \
  --vcpus=1 \
  --ram=512 \
  --cdrom=/kvm/vyos-1.1.7-i586.iso \
  --network bridge=br0 \
  --network bridge=br1 \
  --os-type=linux \
  --os-variant=debiansqueeze
```

* 起動後はユーザー名:vyos、パスワード:vyosでログインし、対話インストールを行い、一旦シャットダウンする。

```
$ intall system
---対話モードによるインストール---
$ power off
```

## VyOS基本設定
KVM上のVyOSの設定を行っていく。

* KVMのVyOS仮想マシンを起動して、コンソールログイン

```
$ virsh
$ list --all
$ start vyos
$ console [vyos仮想マシンのID(list --allで一番左に出る数字)]
```

ユーザー名:vyos、パスワード:vyosでログインする。

* 以降はVyOSの基本設定(Firewall等のセキュリティは省略)  
[VyOSユーザガイド](http://wiki.vyos-users.jp/ユーザーガイド)を参考。

```
# 設定モードに入る
configure

# ホスト名を任意で設定
set system host-name vyos

#WAN側のIPアドレスの設定(今回はdhcp)
set interface ethernet eth0 address dhcp

#LAN側のIPアドレスの設定(外部からアクセスしたいネットワーク用)
set interface ethernet eth1 address 192.168.10.1/24

# eth0にNATの設定を行う
set nat source rule 100 outbound-interface eth0
set nat source rule 100 translation address masquerade

# リモート管理用にSSHを有効にする
set service ssh port 22

# タイムゾーンの設定
set system time-zone Asia/Tokyo

# 変更のコミットおよび設定保存
commit
save
```

* 接続性を確認

```
--マンションGWルータへのping--
$ ping 10.xxx.yyy.1

--リモートでアクセスしたい機器へのping--
$ ping 192.168.10.xxx

--(重要)さくらクラウドのVyOSのグローバルIPにもpingで確認--
$ ping [さくらクラウドのVyOSのグローバルIP]
```

今回はここまで。次回は自宅VyOSとさくらクラウドVyOS間のOpenVPNについて書きます。