Ubuntu16.04LTSにOpenVPN Serverをtun設定(Layer3)で導入し外出先からでも自宅内のコンテンツにアクセスできるようにします。ネットワーク設定にはufwを使用します。ufwが有効化されている環境を前提としています。ufwを有効にしていない場合は前回掲載の当Blog内記事を参照のうえ有効化してください。
1.PKGの最新化
以下の通りアップデート、アップグレードをしてubuntu16.04LTSを最新に更新します。
1 2 |
$ sudo apt-get update $ sudo apt-get upgrade |
2.インストール
(1)バージョン確認
インストールの前にopenvpnとeasy-rsaのインストールバージョンを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ apt-cache policy openvpn easy-rsa openvpn: インストールされているバージョン: (なし) 候補: 2.3.10-1ubuntu2.1 バージョンテーブル: 2.3.10-1ubuntu2.1 500 500 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages 500 http://jp.archive.ubuntu.com/ubuntu xenial-security/main amd64 Packages 2.3.10-1ubuntu2 500 500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages easy-rsa: インストールされているバージョン: (なし) 候補: 2.2.2-2 バージョンテーブル: 2.2.2-2 500 500 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages 500 http://jp.archive.ubuntu.com/ubuntu xenial/universe i386 Packages |
インストール予定バージョンは以下のようになります。
openvpn:2.3.10-1ubuntu2.1、easy-rsa:2.2.2-2
(2)インストール実行
以下の通り、apt installコマンドでopenvpnとeasy-rsaをインストールします。
1 |
$ sudo apt install openvpn easy-rsa |
3.各種証明書等の作成
(1)環境設定ファイル準備
varsファイルを作成し証明書作成時に参照する環境変数を設定します。
make-caコマンドでcaディレクトリを作成しデフォルト設定のvarsファイルを編集します。
1 2 |
$ make-cadir ~/ca $ vi ca/vars |
以下の通りvarsファイルを編集し所在地情報を変更します。修正しない場合はデフォルト値が証明書作成時に使用されます。
1 2 3 4 5 6 7 8 9 10 |
-export KEY_COUNTRY="US" +export KEY_COUNTRY="JP" -export KEY_PROVINCE="CA" +export KEY_PROVINCE="TOKYO" -export KEY_CITY="SanFrancisco" +export KEY_CITY="Chiyodaku" -export KEY_ORG="Fort-Funston" +export KEY_ORG="ubuntu-gtrt7" -export KEY_EMAIL="me@myhost.mydomain" +export KEY_EMAIL="me@gtrt7.local" |
(2)Varsファイル内容反映
varsファイル内容を環境変数に設定します。
1 2 |
$ cd ca $ source vars |
(3)ディレクトリ初期化
作成したcaディレクトリを初期化します。
1 |
$ ./clean-all |
(4)CA証明書とCA秘密鍵作成
build-caコマンドでCA証明書とCA秘密鍵を作成します。
途中キー入力を求められますがすべて[Enter]を入力します(計8回)。
1 2 3 |
$ ./build-ca Generating a 2048 bit RSA private key ... |
(5)サーバー証明書と秘密鍵作成
build-caコマンドでCA証明書とCA秘密鍵を作成します。
途中キー入力を求められますが[Enter]を入力します(計10回)。
最後に[y/n]はyを入力します(2回)。
1 2 3 |
$ ./build-key-server server enerating a 2048 bit RSA private key ...... |
(6)DHパラメーター生成
2048ビットのDHパラメーターを生成します。
1 |
$ ./build-dh |
時間がかかります。
(7)TLS認証用の秘密鍵作成
TLS認証用の秘密鍵を作成します。
1 |
$ openvpn --genkey --secret keys/ta.key |
(8)各種証明書コピー
生成した各種証明書や秘密鍵などを、「/etc/openvpn/」ディレクトリーにコピーします。
以下の6ファイルをコピーします。
NO | ファイル名 | 説明 |
---|---|---|
1 | ca.crt | CA証明書 |
2 | ca.key | CA秘密鍵 |
3 | server.crt | サーバー証明書 |
4 | server.key | サーバー秘密鍵 |
5 | ta.key | TLS認証用の秘密鍵 |
6 | dh2048.pem | DHパラメーター |
1 2 |
$ cd keys/ $ sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn |
4.OpenVPN設定ファイルの作成
(1)サンプル設定ファイル解凍&コピー
サンプルのserver.confを解凍し/etc/openvpn/ディレクトリにコピーします。
1 2 |
$ sudo gzip -d /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz $ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn |
(2)設定ファイルの修正
以下の設定を確認し相違があれば変更します。ネットワーク設定項目は各環境に合わせて修正します。右側にコメントを記載しましたので参考にしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ vi /etc/openvpn/server.conf port 1194 #デフォルト値 proto udp #デフォルト値 dev tun #デフォルト値 ca ca.crt #デフォルト値 cert server.crt #デフォルト値 key server.key #デフォルト値 dh dh2048.pem #デフォルト値 server 10.8.0.0 255.255.255.0 #デフォルト値 push "route 192.168.1.0 255.255.255.0" #追加(LAN(例:192.168.1.0/24)へのルートをVPNサーバー経由にする) push "redirect-gateway def1 bypass-dhcp" #コメントアウト解除(VPN ClientのすべてのトラフィックをVPNサーバー経由にする) push "dhcp-option DNS 192.168.XXX.XXX" #追加(VPNサーバLAN内のDNSサーバを指定する) tls-auth ta.key 0 #コメントアウト解除(TLS認証有効化) cipher AES-256-CBC #追加(認証方式にAES-256-CBCを指定) auth SHA512 #追加(AuthにSHA512を指定) comp-lzo #転送データのlzo圧縮を有効化 user nobody #行頭の;を削除(OpenVPN実行権限を下げる) group nogroup #行頭の;を削除(OpenVPN実行権限を下げる) status /var/log/openvpn-status.log #ログのパスを/var/log/に変更 log /var/log/openvpn.log #行頭の;を削除(ログのパスを/var/log/に変更) log-append /var/log/openvpn.log #行頭の;を削除(ログのパスを/var/log/に変更) |
5.ネットワーク設定
(1)ポート転送の有効化
/etc/sysctl.confファイルを書き換えてIP4ポート転送を有効にします。書換後設定をロードします。
1 2 |
$ sudo sed -i 's/^#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf $ sudo sysctl -p |
(2)ポート開放
VPN通信用にファイア―ウォールの1194番ポートを開放します。
1 |
$ sudo ufw allow 1194/udp |
(3)IPマスカレード設定事前調査
サーバーのネットワークインタフェースのデバイス名を調査します。
1 2 |
$ ip route | grep default default via 192.168.XXX.XXX dev ens160 onlink |
デバイス名はens160と分かりました。
(4)IPマスカレード設定
VPNの通信を中継させるためにIPマスカレードの設定をします。ファイアウォールのルーティングテーブル「/etc/ufw/before.rules」を修正します。行頭コメントブロック内「# ufw-before-forward」の行の後、10行目から15行目のブロックを追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo vi /etc/ufw/before.rules # # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # START OPENVPN RULES *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o ens160 -j MASQUERADE COMMIT # END OPENVPN RULES |
(5)デフォルト転送設定変更
外部からの転送設定をDROPからACCEPTに、「/etc/default/ufw」を変更します。
1 |
$ sudo sed -i 's/^DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw |
(6)ファイアウォール再起動
変更後はファイアウォールを再起動します。
1 2 |
$ sudo ufw disable $ sudo ufw enable |
6.起動
openvpnサーバを起動します。再起動後も自動起動されるよう設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ sudo systemctl start openvpn@server $ sudo systemctl enable openvpn@server $ systemctl status openvpn@server ● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset Active: active (running) since 土 2017-10-07 22:43:58 JST; 48s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 7751 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openv Main PID: 7755 (openvpn) CGroup: /system.slice/system-openvpn.slice/openvpn@server.service mq7755 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/s 10月 07 22:43:58 ubuntu16 ovpn-server[7755]: MULTI: multi_init called, r=256 v=2 10月 07 22:43:58 ubuntu16 ovpn-server[7755]: IFCONFIG POOL: base=10.8.0.4 size=6 10月 07 22:43:58 ubuntu16 ovpn-server[7755]: IFCONFIG POOL LIST 10月 07 22:43:58 ubuntu16 ovpn-server[7755]: Initialization Sequence Completed |
statusを確認しActive: activeと表示されていたら成功です。
7.Clientの設定
(1)クライアント証明書と秘密鍵作成
クライアント接続用の証明書と秘密鍵を作成します。接続するクライアントが複数ある場合はその数だけユニーク名を指定し作成します。build-keyコマンドで途中キー入力(計10回)を求められますが全て[Enter]を応答します。最後2回の[y/n]入力要求は「y」を入力します。クライアント証明書名はubuntucl1とします。
1 |
$ ./build-key ubuntucl1 |
(2)クライアントのセットアップ
Windowsクライアント前提になりますが、OPENVPNClientのインストーラをこのURLからダウンロードしセットアップします。
(3)証明書ダウンロード
FTPクライアントツールを使用しopenvpサーバで作成した以下のファイルをダウンロードし
C:\Program Files\OpenVPN\configへコピーします。
NO | ファイル名 | 説明 |
---|---|---|
1 | ca.crt | CA証明書 |
2 | ta.key | TLS認証用の秘密鍵 |
3 | ubuntucl1.key | クライアント秘密鍵 |
4 | ubuntucl1.crt | クライアント証明書 |
(4)クライアント設定ファイルの修正
クライアント設定ファイルサンプル(C:\Program Files\OpenVPN\sample-config\client.ovpn)を設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へコピーします。client.ovpnをc:以外にコピーして編集します。
1 2 3 4 5 6 7 8 9 10 11 |
client #デフォルト値 dev tun #デフォルト値 proto udp #デフォルト値 remote hogehoge.com 1194 #VPNサーバー名を指定 cert ubuntucl1.crt #クライアント証明書ファイル名を指定 key ubuntucl1.key #クライアント秘密鍵ファイル名を指定 remote-cert-tls server #デフォルトで有("Man-in-the-Middle"攻撃対策) tls-auth ta.key 1 #行頭の;を削除してコメント解除(TLS認証有効化) cipher AES-256-CBC #サーバ設定に合わせて追記 auth SHA512 #サーバ設定に合わせて追記 comp-lzo #サーバ設定に合わせます |
編集完了後に、C:\Program Files\OpenVPN\config)へコピーします。
8.ログローテーション設定
ログロテーションファイルを用意し、ログが一定期間で切り捨てられるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#OpenVPNログローテーション設定ファイル新規作成 vi /etc/logrotate.d/openvpn /var/log/openvpn-status.log { weekly rotate 7 delaycompress compress missingok notifempty } /var/log/openvpn.log { weekly rotate 7 delaycompress compress missingok notifempty sharedscripts postrotate systemctl restart openvpn@server 2>&1 > /dev/null || true endscript } |
9.参考にさせて頂いた情報
Ubuntu 15.10にOpenVPNサーバーを構築
日経Linux2017年9月号特集1-28
ありがとうございます。
Centos7のVPN設定は、当Blog内「CentOS7にOpenVPNをtun設定で導入する」です。