💂
VPNサーバをさくらVPSで建てる
IPを固定する必要が出たのでVPNサーバを立ててIPを固定してみた。
さくらVPSを契約してUbuntu 20.04をインストールする
このあたりはポチポチとGUIでやっていくだけなので省略。
最低限、以下の設定はしておく
- 公開鍵でのsshログインのみを許可
- rootでのsshログインはできないようにしておく
- sshのポートを22から変更する
- 仮に
10022
を設定したとして記事は書いておく
- 仮に
- パケットフィルターの設定でssh用のポートだけ空けておく
OpenVPNのインストール
面倒なので、rootユーザでサクッとやってしまう。
# apt-get update
# apt-get install openvpn libssl-dev openssl easy-rsa
認証鍵の生成
初期設定
# cd /etc/openvpn/easy-rsa
# ./easyrsa init-pki
# vim vars
Key | Value |
---|---|
EASYRSA_REQ_COUNTRY | 国。JP を設定 |
EASYRSA_REQ_PROVINCE | 都道府県 |
EASYRSA_REQ_CITY | 市区町村 |
EASYRSA_REQ_ORG | 会社名?個人ならば適当に |
EASYRSA_REQ_EMAIL | メールアドレス |
EASYRSA_REQ_OU | 部署名?個人ならば適当に |
EASYRSA_CA_EXPIRE | CA証明書の期限。少し長めにしておくとよいかも。3650日に設定している記事もあった。 |
EASYRSA_CERT_EXPIRE | 証明書の期限。これも伸ばしておく。 |
を設定しておく。
CA証明書の作成
# cd /etc/openvpn/easy-rsa
# ./easyrsa build-ca
# cp pki/ca.crt /etc/openvpn
パスフレーズを聞かれるので1Passwordなどを使って適切なパスフレーズを生成して使う。
サーバ証明書の作成
# cd /etc/openvpn/easy-rsa
# ./easyrsa build-server-full server nopass
# cp pki/issued/server.crt /etc/openvpn
# cp pki/private/server.key /etc/openvpn
CA証明書のパスフレーズを聞かれるので入力する
DHパラメータの生成
# cd /etc/openvpn/easy-rsa
# ./easyrsa gen-dh
# cp pki/dh.pem /etc/openvpn
クライアント証明書の生成
# cd /etc/openvpn/easy-rsa
# ./easyrsa gen-crl
# cp pki/crl.pem /etc/openvpn
# chmod o+r /etc/openvpn/crl.pem
CA証明書のパスフレーズを聞かれるので入力する
OpenVPNの設定
# vim /etc/openvpn/server.conf
dhcp-option DNS
を設定したら名前解決できなくなったのでここではコメントアウトしている。
/etc/openvpn/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
crl-verify crl.pem
server 10.8.0.0 255.255.255.0
topology subnet
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "route 10.8.0.0 255.255.255.0"
# いろんな記事でDNS設定しろと書いてあるけどさくらVPSのDNS設定しても動かなかったので指定はしない
# push "dhcp-option DNS 133.242.0.3"
# push "dhcp-option DNS 133.242.0.4"
client-to-client
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
ファイアウォールの設定
ufwの設定
# ufw default deny
# ufw allow 1194/udp
# ufw allow 10022 # 自分で設定したsshのポート
# ufw status
# ufw enable
フォワーディング設定
# vim /etc/default/ufw
/etc/default/ufw
- DEFAULT_FORWARD_POLICY="DROP"
+ DEFAULT_FORWARD_POLICY="ACCEPT"
# vim /etc/ufw/sysctl.conf
/etc/ufw/sysctl.conf
- # net.ipv4.ip_forward=1
+ net.ipv4.ip_forward=1
IPマスカレードの設定
- デフォルトのnicを特定する
# ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1
-
/etc/ufw/before.rules
の修正
# vim /etc/ufw/before.rules
一番上に、 nat
の設定を挿入する。
ens3
は先ほど特定したnicの名前を入れる
/etc/ufw/before.rules
+ *nat
+ :POSTROUTING ACCEPT [0:0]
+ -A POSTROUTING -s 10.8.0.0/24 -o ens3 -j MASQUERADE
+ COMMIT
# Don't delete these required lines, otherwise there will be errors
*filter
# ufw reload
最後に、さくらVPSのコントロールパネルでパケットフィルターの設定をオフにする
OpenVPNサーバの起動
# service openvpn@server start
# service openvpn@server status
● openvpn@server.service - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/openvpn@.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-12-29 17:56:51 JST; 45min ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 601 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 468)
Memory: 4.9M
CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
└─601 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
Dec 29 17:56:51 XXX systemd[1]: Starting OpenVPN connection to server...
Dec 29 17:56:51 XXX systemd[1]: Started OpenVPN connection to server.
active (running)
になっていればOK。自動起動するように設定
# systemctl enable openvpn@server
クライアント用の設定ファイル作成
秘密鍵の作成
# cd /etc/openvpn/easy-rsa
# ./easyrsa build-client-full username
username
部分は適当に置き換える。仮に testuser とした場合の設定を書いておく
# cd /etc/openvpn/easy-rsa
# cp /etc/openvpn/ca.crt ~ubuntu
# cp pki/issued/testuser.crt ~ubuntu
# cp pki/private/testuser.key ~ubuntu
# chown ubuntu:ubuntu ~ubuntu/ca.crt
# chown ubuntu:ubuntu ~ubuntu/testuser.crt
# chown ubuntu:ubuntu ~ubuntu/testuser.key
OpenVPN Connect用の設定ファイルの作成
ここは ubuntu
ユーザで実行する
$ vim vpn.ovpn
client
dev tun
proto udp
tun-mtu 1350
# `192.0.2.0` の部分はこのサーバのグローバルIPアドレスを指定する
remote 192.0.2.0 1194
resolv-retry infinite
nobind
persist-key
persist-tun
# ca.crtの中身を貼り付ける
# grep -A 30 'BEGIN CERTIFICATE' ca.crt
# で抽出できる
<ca>
...
</ca>
# testuser.crtの中身を貼り付ける
# grep -A 30 'BEGIN CERTIFICATE' testuser.crt
# で抽出できる
<cert>
...
</cert>
# testuser.keyの中身を貼り付ける
<key>
...
</key>
comp-lzo
verb 3
この vpn.ovpn
をローカルに落として OpenVPN Connect にインポートすれば無事にVPNとして動くはず。
うまく動かない場合
/var/log/openvpn/openvpn.log
にログがあるのでエラーメッセージを見て潰していく
Discussion