IBM Cloud VPC 内の Ubuntu に Veeam PN を導入し、 SSL VPN 接続する


# 概要
このようなイメージで実機確認します。

![Kobito.zLYedt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/b9908ef0-e4b4-9aba-5ea1-f30e29597690.png "Kobito.zLYedt.png")

# バージョン確認
こちらの Ubuntu 環境に導入します。

```shell:
# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
```

# インストール
こちらにガイドに従って導入します。

> - [Install Veeam PN on Ubuntu - Veeam PN User Guide](https://helpcenter.veeam.com/docs/veeampn/userguide/install_veeampn_on_linux.html?ver=21)

> ※ WireGuard のレポジトリ追加は不要となったようです。

```shell:

# curl -k http://repository.veeam.com/keys/veeam.gpg | apt-key add -
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  5469  100  5469    0     0  17641      0 --:--:-- --:--:-- --:--:-- 17641
OK
```

```shell:

# echo "deb [arch=amd64] http://repository.veeam.com/pn/public pn stable" > /etc/apt/sources.list.d/veeampn.list
# apt-get update
Hit:1 http://mirrors.adn.networklayer.com/ubuntu bionic InRelease
Hit:2 http://mirrors.adn.networklayer.com/ubuntu bionic-updates InRelease             
Hit:3 http://mirrors.adn.networklayer.com/ubuntu bionic-backports InRelease            
Get:4 http://repository.veeam.com/pn/public pn InRelease [7,581 B]                                           
Hit:5 http://mirrors.adn.networklayer.com/ubuntu bionic-security InRelease        
Get:6 http://repository.veeam.com/pn/public pn/stable amd64 Packages [3,609 B]
Fetched 11.2 kB in 1s (8,616 B/s)     
Reading package lists... Done
```

```shell:

apt-get -y install veeam-vpn-ui veeam-vpn-svc
```

以下の画面で「Yes」と答えるとインストール完了です。

![Kobito.huOZGL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/ffd7e914-792b-5b97-0539-0f884f9f7424.png "Kobito.huOZGL.png")

# ログイン・初期設定
Veeam PN ポータルにアクセスして、ログイン・初期設定します。

>Username: root
>Password: 「Linuxのrootユーザーと同じパスワードが初期設定」

![Kobito.d0gERP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/1bed38df-5f4c-a7ff-26d8-30f274afd993.png "Kobito.d0gERP.png")

Veeam PN ポータル用のパスワードを任意に設定します。

![Kobito.VjCezL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/445eec60-9b66-139c-cf54-93803fe19371.png "Kobito.VjCezL.png")

まず最初に作成する必要があるのは、Network hub になります。
（その後に VPN 接続先として追加したいサイトには、Site gateway を配置します。）

> - [Deploying Network Hub - Veeam PN User Guide](https://helpcenter.veeam.com/docs/veeampn/userguide/deploy_server.html?ver=21)
The first step of the VPN infrastructure configuration is to deploy the network hub. The network hub is the core component in the VPN infrastructure that provides VPN connections and services to remote sites and users. All traffic in the VPN is routed through the network hub.

![Kobito.Yn9NYA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/6624469a-9364-f3b0-ede6-93746734695d.png "Kobito.Yn9NYA.png")

自己署名の証明書を作成するのに必要な組織名を設定します。

![Kobito.PLp64g.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/3b4e480c-643b-30f3-c1ef-556c36358644.png "Kobito.PLp64g.png")

自己署名の証明書作成が完了します。

![Kobito.amAEeA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/e82d3667-2180-06df-d9e7-2723a0722496.png "Kobito.amAEeA.png")

VPN 接続エンドポイントとして公開する IP アドレスまたは DNS 名を設定します。
（今回は Ubuntu にバインドした Floating IP を設定します。）

![Kobito.LnOwX9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/768e86e4-b7fb-2f1f-dfca-0cc1cc9221cf.png "Kobito.LnOwX9.png")

最後にこちらのポータル画面が表示されれば設定完了です。
※ WireGuard 起動に失敗し、Site-to-Site が Stopped になってしまう場合は、しばらく経ってから再度 Site-to-Site を有効化してみてください。

![Kobito.7oCU5F.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/a613a4fb-9daa-0e36-c0f0-8263457f7e77.png "Kobito.7oCU5F.png")

# Point-to-site VPN サーバー設定

[Point-to-site VPN](https://helpcenter.veeam.com/docs/veeampn/userguide/point_to_site_vpn.html?ver=21) のユースケースを実機で確認します。
「Client」の作成から「Standalone Computer」を設定します。

![Kobito.gv4aH4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/dee654fc-b826-a897-fba2-0e7e1fee8c17.png "Kobito.gv4aH4.png")

「Client」の名前を設定します。

![Kobito.PHFmNC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/969a8bf8-645f-4072-8572-7bfa58744499.png "Kobito.PHFmNC.png")

内容を確認して、設定を完了します。

![Kobito.dED74v.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/c52923f4-0d9d-aa9c-224d-b54c66c8b9e1.png "Kobito.dED74v.png")

すると、クライアント用の OpenVPN 設定ファイルをダウンロードするためのポップアップが表示されるので、こちらをダウンロードしてクライアントPCに保存します。

![Kobito.3mtEun.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/da23625b-0fa3-139d-6a53-ec458617e22d.png "Kobito.3mtEun.png")

最後に、リモートサイト内へのルーティングを追加するために以下の設定を追加します。

```
echo ' ' >> /etc/veeampn/EndpointOVPN.cfg
echo 'push "route 192.168.250.0 255.255.255.0"' >> /etc/veeampn/EndpointOVPN.cfg
```

その後、サーバー設定ファイルの変更を反映するために、Point-to-Site のサービスを OFF --> ON と再起動します。

![Kobito.uF7Bjy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f8032531-a4d9-6641-9446-761789e1bb72.png "Kobito.uF7Bjy.png")


# Point-to-site VPN クライアント設定
VPN クライアントには OpenVPN クライアントをインストールします。

> - [How To Install | OpenVPN.JP](https://www.openvpn.jp/document/how-to/#Installing)

macOS の場合は [Tunnelblick | Free open source OpenVPN VPN client server software for macOS](https://www.tunnelblick.net/) を使います。

先ほどダウンロードした `khayama-test.ovpn` を接続先として登録します。

![Kobito.cZH8Om.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/d1174b4b-73ef-6718-82fd-383ef93cda43.png "Kobito.cZH8Om.png")

接続が完了すると、以下のような画面になります。
※ つながらない場合は、VPC の Security Group のルールで通信が許可されているか確認します。

![Kobito.gcNv7C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/b3dddb49-1bac-98a3-bd75-a0c12afa5802.png "Kobito.gcNv7C.png")

# さいごに
IBM Cloud の Classic Infra にはある SSL-VPN 接続が VPC では現時点で提供がないので、VPN が必要な場合には Veeam PN が簡単に導入できてよさそうです。
また、災害対策先のサイトも VPN はシングル構成であることも多いので、このようなソリューションで簡易にサイト間も接続しておくこともできそうです。

# 参考 : `/etc/veeampn/EndpointOVPN.cfg` のデフォルト
サーバー設定ファイルの変更を反映するには、Point-to-Site のサービスを再起動します。

- クライアントに割り当てたいアドレス帯を変更するには `server 10.210.0.0 255.255.0.0` を変更する
- クライアントにリモートサイト内へのルーティングを追加するには `push "route 192.168.250.0 255.255.255.0"` を追加する

```txt:/etc/veeampn/EndpointOVPN.cfg
mode server

port 6179
proto udp
server 10.210.0.0 255.255.0.0

dev tun.veeampn

persist-key
persist-tun

topology subnet

auth SHA256
auth-nocache
cipher AES-256-CBC

tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384

remote-cert-tls client

fast-io
mssfix 1380
txqueuelen 1000

sndbuf 1048576
rcvbuf 1048576

keepalive 10 20


management mgmtEndpointOVPN unix
auth-user-pass-optional
management-client-auth
management-hold

<ca>
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

</ca>

<cert>
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=CA, L=SanFrancisco, O=org, OU=Acme, CN=org CA/name=khayama.org/emailAddress=nonexistent@acme.org
        Validity
            Not Before: Oct 23 08:39:05 2020 GMT
            Not After : Oct 21 08:39:05 2030 GMT
        Subject: C=US, ST=CA, L=SanFrancisco, O=org, OU=Acme, CN=EndpointOVPN/name=khayama.org/emailAddress=nonexistent@acme.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Cert Type: 
                SSL Server
            Netscape Comment: 
                Easy-RSA Generated Server Certificate
            X509v3 Subject Key Identifier: 
                C9:
            X509v3 Authority Key Identifier: 
                keyid:
                DirName:/C=US/ST=CA/L=SanFrancisco/O=org/OU=Acme/CN=org CA/name=khayama.org/emailAddress=nonexistent@acme.org
                serial:

            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Key Usage: 
                Digital Signature, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:EndpointOVPN
    Signature Algorithm: sha256WithRSAEncryption
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----
</key>
<dh>
-----BEGIN DH PARAMETERS-----
-----END DH PARAMETERS-----
</dh>
```