rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

OpenVPNインストール ルーティング方式 Easy-RSA3利用、TLS認証あり版

2021 May 05.
2021 Apr. 11.
2021 Mar. 28.
2021 Jan. 31.
2020 Nov. 06.
2020 Oct. 02.
2020 Sep. 22.
2020 Mar. 29.
2019 Oct. 21.
2019 Apr. 27.
2018 Oct. 08.
2018 Sep. 02.

参考元 https://qiita.com/noraworld/items/2fe6be489e1d93c748b8

これまでの失敗

  • 複数サーバー設置時のサーバー設定ファイルとクライアント設定ファイルでのポート番号間違い。
  • 設定ファイル丸写しによる個別ファイル名変更忘れ。


OpenVPNプログラムのインストール
(Ubuntu)
$ sudo apt install openvpn git

(Manjaro Linux / Arch Linux)
openvpn、gitパッケージをインストールする


$ mkdir ~/YOUR-WORK-DIR
$ cd ~/YOUR-WORK-DIR
  CA証明書(認証局証明書)の再作成に備え、~/YOUR-WORK-DIRは恒久的なディレクトリとする。

$ git clone https://github.com/OpenVPN/easy-rsa.git

初期設定

$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3
$ ./easyrsa init-pki

CA証明書生成

以後入力するパスフレーズはすべて同じにしておいた方が楽。
CA名称は "ホスト名+OS名" にした。

$ ./easyrsa build-ca
$ sudo cp pki/ca.crt /etc/openvpn/

サーバ証明書生成

$ ./easyrsa build-server-full server nopass
$ sudo cp pki/issued/server.crt /etc/openvpn/
$ sudo cp pki/private/server.key /etc/openvpn/

DH鍵生成

$ ./easyrsa gen-dh
$ sudo cp pki/dh.pem /etc/openvpn/

TLS鍵生成

(2021 May 04)
$ openvpn --genkey secret ./pki/ta.key

(old)
($ openvpn --genkey --secret ./pki/ta.key)

$ sudo cp ./pki/ta.key /etc/openvpn/

失効クライアント証明書リスト生成

$ ./easyrsa gen-crl
$ sudo cp pki/crl.pem /etc/openvpn/
$ sudo chmod o+r /etc/openvpn/crl.pem

サーバー設定ファイル記述

# touch /etc/openvpn/server.conf

/etc/openvpn/server.confを編集

port   1194    ## LAN内に複数のopenvpnサーバーを置くなら変更する
proto  udp
dev    tun

cipher AES-256-CBC
auth SHA512 

ca          ca.crt
cert        server.crt
key         server.key
dh          dh.pem
crl-verify  crl.pem 

tls-auth ta.key 0 

ifconfig-pool-persist ipp.txt

server 10.8.0.0 255.255.255.0

push "redirect-gateway def1 bypass-dhcp"
push "route 10.8.0.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"

client-to-client
keepalive 10 120
comp-lzo

user  nobody
group nogroup

persist-key
persist-tun

status      /var/log/openvpn-status.log
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

verb 3 

ファイアウォール設定

# ufw enable 
# ufw allow 1194/udp    ## /etc/openvpn/server.confに記述したポート番号
# ufw reload

IPフォワーディング設定

/etc/default/ufw を編集する

  DEFAULT_FORWARD_POLICYをDROPからACCEPTに変更する
    - DEFAULT_FORWARD_POLICY="DROP"
    + DEFAULT_FORWARD_POLICY="ACCEPT"

IPフォワーディングを有効化

  /etc/ufw/sysctl.confを編集する
   net/ipv4/ip_forward=1の一行をアンコメントする
    - #net/ipv4/ip_forward=1
    + net/ipv4/ip_forward=1

   (旧書式)
   net.ipv4.ip_forward=1の一行をアンコメントする
    - # net.ipv4.ip_forward=1
    + net.ipv4.ip_forward=1


IPマスカレード有効化

ifconfigでネットワークポート名を確認する( enp0s7 とか)
/etc/ufw/before.rulesを編集し、ufwを再読み込みする

  一番下の行にCOMMITと書かれているはずなので、この下に以下を追加する。

COMMIT
(このCOMMITは元々書かれているもの。削除しない)

# START OPENVPN RULES
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o enp0s7 -j MASQUERADE
COMMIT
# END OPENVPN RULES

  ufw再読み込み

# ufw reload

Logローテーション設定

参照元 https://gtrt7.com/blog/linux/ubuntu-openvpn

OpenVPNログローテーション設定ファイル /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
}

OpenVPN起動

# systemctl start openvpn@server.service
//  systemctl start openvpn.service では起動できない

起動確認

$ ps ax -f | grep openvpn | grep -v grep
$ systemctl status openvpn@server.service

  Active: active (running) の表示を確認する

OpenVPN自動起動設定

# systemctl disable openvpn
# systemctl disable openvpn.service
# systemctl enable openvpn@server.service
起動設定確認
$ systemctl is-enabled openvpn openvpn.service openvpn@server.service openvpn@server

クライアント用秘密鍵の生成

$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3 


次のクライアント秘密鍵生成時のパスワード有無は、パスワード有りにしても、クライアント側ソフトに、一度設定すれば以後は入力不要の機能があるはずなので、どちらでもかまわない。

(接続時パスワード無し)

$ ./easyrsa build-client-full CLIENTHOGE nopass


(接続時パスワード有り)

 $ ./easyrsa build-client-full CLIENTHOGE

(CLIENTHOGEは "サーバー名+サーバーOS+クライアント端末名" とした)


次の作業を行う

$ mkdir ~/YOUR-WORK-DIR/CLIENT-FILE-DIR
$ sudo cp /etc/openvpn/ca.crt ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/
$ cd ~/YOUR-WORK-DIR/easy-rsa/easyrsa3
$ cp pki/issued/CLIENTHOGE.crt ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/
$ cp pki/private/CLIENTHOGE.key ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/
$ sudo chown USER:USER ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/ca.crt
$ chown USER:USER ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/CLIENTHOGE.crt
$ chown USER:USER ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/CLIENTHOGE.key

  USER: VPNサーバに現在ログインしているユーザのユーザ名

接続するクライアントに鍵ファイルをダウンロード
$ scp ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/ca.crt CLIENT/
$ scp ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/CLIENTHOGE.crt CLIENT/
$ scp ~/YOUR-WORK-DIR/CLIENT-FILE-DIR/CLIENTHOGE.key CLIENT/
$ scp ~/YOUR-WORK-DIR/easy-rsa/easyrsa3/pki/ta.key CLIENT/
VPNCLIENT.ovpn を作る(ファイル名は任意だが、拡張子は .ovpn )
client
dev    tun
proto  udp
remote YOUR.GLOBAL.ADDRESS.HERE 1194
resolv-retry  infinite
nobind
tls-auth ta.key 1
persist-key
persist-tun
cipher AES-256-CBC

auth SHA512

ca    ca.crt
cert  CLIENTHOGE.crt
key   CLIENTHOGE.key
comp-lzo
verb 3

# persist-key, persist-tun, comp-lzo, verb はサーバ側と同じにする。サーバ側に設定してあればこちらにも入力し、設定していない場合は外す。

VPNCLIENT.ovpn をクライアントにコピー
$ scp VPNCLIENT.ovpn CLIENT/
android端末にOpenVPN for Androidをインストールする

OpenVPN for Androidを開き、「プロファイルの追加」アイコンをタップして、 .ovpnファイルをインポートし、他の3ファイルを読み込む。

OpenVPN for Android 設定
種別: 証明書
CA証明書 ca.crt
クライアント証明書  CLIENTHOGE.crt
クライアント証明書のキー CLIENTHOGE.key
ポート番号 1194
プロコトル UDP

TLS認証を使用する :  on
暗号化方式: AES-256-CBC

OpenVPNサーバー、LAN内ホスト、 LAN外OpenVPNクライアントのIPアドレス、通信関係

IPアドレス

OpenVPNサーバー:(OpenVPN導入前からの)LAN内アドレス(例 192.168.1.1)
LAN内ホスト:LAN内アドレス(例 192.168.1.2)
LAN外OpenVPNクライアント:/etc/openvpn/server.confのserverに設定されたネットワークのアドレス(例 10.8.0.6)

LAN内ホストとLAN外OpenVPNクライアントとの通信
  • LAN内ホストからLAN外OpenVPNクライアントへのping
$ ping -c 1 10.8.0.6
PING 10.8.0.6 (10.8.0.6) 56(84) バイトのデータ
64 バイト応答 送信元 10.8.0.6: icmp_seq=1 ttl=64 時間=87.2ミリ秒

  • LAN外OpenVPNクライアントからLAN内ホストへのping

Androidpingアプリをインストールし、192.168.1.2にping(ICMP)を飛ばせた。

警告・エラーメッセージ対応

WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
This is nothing to worry about.
https://support.hidemyass.com/hc/en-us/articles/202720436-Auth-nocache-Warning-in-OpenVPN-connection-log

WARNING: cipher local='cipher BF-CBC' remote='cipher AES-256-CBC'
クライアントの暗号化方式を AES-256-CBS に指定する。

WARNING: No server certificate verification method has been enabled.
クライアント設定で「TLSサーバー証明書を要求する」をオンにする。

VPN経由でアクセスするLAN内の各種サーバーの設定
http://rokkonet.blogspot.com/2018/05/openvpn.html