WebArena VPSクラウド(月々税抜360円)で固定IPアドレスをゲットする(OpenVPNサーバを作る) on CentOS 7.6

# 元の記事

@tool-taro 様の以下の記事を参考（というよりほぼそのまま利用）とさせて頂きました。感謝です。m(_ _)m

さくらのVPS512(月々税抜635円)で固定IPアドレスをゲットする(OpenVPNサーバを作る) - Qiita
https://qiita.com/tool-taro/items/76cef0909c9b119d22b2

# 違うところ

| 相違点 | 元記事 | 本記事 |
|:--|:--|:--|
| 利用するVPS   | さくらVPS  | [WebArena VPSクラウド](https://web.arena.ne.jp/vps-cloud/)  |
| OS  | CentOS 7.1  | CentOS 7.6.1810  |
| IPフォワーディング有効化<br>を定義するファイル  | `/etc/sysctl.d/10-ipv4.conf`  | `/etc/sysctl.d/99-sysctl.conf`  |
| server.conf定義 | nameserverのIPアドレスがさくら | WebArena（後述） |

## /etc/openvpn/server.conf 定義
元記事とは★部分だけが異なります。こちらの値は`cat /etc/resolv.conf`で取得しました。

```conf
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh.pem

server 192.168.100.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push "redirect-gateway def1"
push "dhsp-option DNS 210.150.255.28" # from /etc/resolv.conf  ★
push "dhsp-option DNS 202.229.78.37" # from /etc/resolv.conf   ★

# iOSで使う場合、fragmentは非対応のためコメントアウトしてください
fragment 1280

mssfix 1280
link-mtu 1400

client-to-client

keepalive 10 120

comp-lzo

user nobody
group nobody

persist-key
persist-tun

status openvpn-status.log

log-append  /var/log/openvpn.log

verb 3

crl-verify crl.pem
```

# Ubuntu18.04でのOpenVPNクライアント設定

以下は、Ubuntuでの設定例です。
(WindowsでのOpen-VPNクライアント設定は[こちらの記事](https://qiita.com/tool-taro/items/76cef0909c9b119d22b2#%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AE%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A)にあるように`vpnux-client`がおすすめです)

## GUI設定ツールのインストール

```bash
# apt install network-manager-openvpn-gnome
```

バージョン確認

```bash
# openvpn --version
OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 10 2018
library versions: OpenSSL 1.1.1g  21 Apr 2020, LZO 2.08
```

## VPN追加

`設定 > ネットワーク > VPN追加 > OpenVPN設定`

[![Image from Gyazo](https://i.gyazo.com/6eeb9ef2491b4c89b486087e17838b1c.png)](https://gyazo.com/6eeb9ef2491b4c89b486087e17838b1c)

[![Image from Gyazo](https://i.gyazo.com/62fd516022ed3416d8200e3e4f000ac4.png)](https://gyazo.com/62fd516022ed3416d8200e3e4f000ac4)

## VPN設定

### 基本設定

Identityタブでゲートウェイ(VPNサーバのIPアドレスやドメイン)、ユーザ名、パスワード、証明書等を設定します。

[![Image from Gyazo](https://i.gyazo.com/bf30858dbfd07c240a494057528e5d18.png)](https://gyazo.com/bf30858dbfd07c240a494057528e5d18)

### 拡張設定

基本設定後に`advanced`ボタン押下して設定します。デフォルトでは何もチェックされていませんが、上述したVPNサーバ設定にあわせて、データ圧縮とUDPフラグメントサイズを明示的に設定します。

これをやらないとVPN接続が確立できませんでした。

[![Image from Gyazo](https://i.gyazo.com/b44e800502b7b59034beab38d9d62783.png)](https://gyazo.com/b44e800502b7b59034beab38d9d62783)

### VPN有効化とログ確認

`設定 > ネットワーク > VPN`でONにします。`tail -f /var/log/syslog`で接続処理の一連のログが参照できます。

[![Image from Gyazo](https://i.gyazo.com/270e29a4f76af5d3aa76452d2ae8f52c.png)](https://gyazo.com/270e29a4f76af5d3aa76452d2ae8f52c)

参考/接続成功時のログ

```bash
<info>  [1601882154.8087] device (tun1): Activation: successful, device activated.
[system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Started Network Manager Script Dispatcher Service.
req:1 'vpn-up' [tun1]: new request (1 scripts)
req:1 'vpn-up' [tun1]: start running ordered scripts...
req:2 'up' [tun1]: new request (1 scripts)
req:2 'up' [tun1]: start running ordered scripts...
```

### 動作確認

[ブラウザでグローバルIPアドレスを確認](https://www.cman.jp/network/support/go_access.cgi)します。
VPNサーバのIPアドレスになっていれば成功です。(設定が間違っていると接続エラーになります)

### 参考/エラーメッセージ

#### パスワード不正

以下のようなエラーがでます。

```
SIGUSR1[soft,private-key-password-failure] received, process restarting
```

#### 拡張設定漏れ

```bash
Bad LZO decompression header byte: 0
```

```
write to TUN/TAP : Invalid argument (code=22)
```