概要¶
- OpenVPNサーバ
- cdsl-vm-2にインストールされている.
- Google Cloud上のVMである.
- OpenVPN 2.6.2
- OpenVPNクライアント
- router2に内蔵されたOpenVPNクライアント機能を使用している.
- 研A910に設置されている.
- 型番:RT-AX3000
- ファームウェアバージョン:3.0.0.4.388_22525
OpenVPNサーバとOpenVPNクライアントの設定ファイル¶
OpenVPNサーバとOpenVPNクライアントの設定ファイルは以下にバックアップしてある.
https://github.com/cdsl-research/openvpn-config-backup
OpenVPNサーバのディレクトリ構成¶
cdsl-vm-2にOpenVPNサーバがインストールされている. このOpenVPNサーバは研究室のDMZ用環境とGCPを接続するために利用されている. インストール先は /etc/openvpn/EasyRSA-3.0.8 である.
- /etc/openvpn/EasyRSA-3.0.8
- 基本的な設定ファイルとスクリプトがある.
- /etc/openvpn/server
- には設定ファイルをおいていない.
- /etc/openvpn/ccd
- クライアント(研A910 DMZ用ルータ向け) がおいてある.
OpenVPNサーバの基本的な作業¶
cdsl-vm-2のOpenVPNサーバの再起動
sudo systemctl restart openvpn
OpenVPNサーバのネットワーク設定¶
cdsl-vm-2の設定を以下に示す.
koyama@cdsl-vm-2:~$ ip route
default via 10.146.0.1 dev ens4 proto dhcp src 10.146.0.2 metric 100
10.146.0.1 dev ens4 proto dhcp scope link src 10.146.0.2 metric 100
192.168.200.0/24 dev tun0 proto kernel scope link src 192.168.200.1
192.168.201.0/24 via 192.168.200.2 dev tun0
koyama@cdsl-vm-2:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
link/ether 42:01:0a:92:00:02 brd ff:ff:ff:ff:ff:ff
inet 10.146.0.2/32 scope global dynamic ens4
valid_lft 2158sec preferred_lft 2158sec
inet6 fe80::4001:aff:fe92:2/64 scope link
valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 192.168.200.1/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::1501:6611:b423:615f/64 scope link stable-privacy
valid_lft forever preferred_lft forever
OpenVPNの動作確認¶
cdsl-vm-2からpingを使いICMPパケットを送る.応答が得られればよい.
koyama@cdsl-vm-2:~$ ping 192.168.201.1
PING 192.168.201.1 (192.168.201.1) 56(84) bytes of data.
64 bytes from 192.168.201.1: icmp_seq=1 ttl=64 time=4.94 ms
64 bytes from 192.168.201.1: icmp_seq=2 ttl=64 time=4.44 ms
64 bytes from 192.168.201.1: icmp_seq=3 ttl=64 time=4.44 ms
^C
--- 192.168.201.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 4.440/4.607/4.938/0.234 ms
Mackerelによる監視¶
VPN接続が切断された場合,Slackの #_alert チャンネルに以下の通知が流れる.

VPN接続が回復した場合,Slackの #_alert チャンネルに以下の通知が流れる.

OpenVPNサーバのログ¶
/var/log/openvpn-status.log にはOpenVPNサーバに接続しているクライアントの一覧とルーティングテーブルが記録される.
OpenVPN CLIENT LIST
Updated,2022-11-13 12:36:48
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
a910-router,163.215.6.1:59913,264187,130734,2022-11-13 12:33:58
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
192.168.201.0/24,a910-router,163.215.6.1:59913,2022-11-13 12:33:58
/var/log/openvpn.log にはOpenVPNサーバの動作ログが記録されている.
2022-11-13 12:32:26 OpenVPN 2.5.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Oct 5 2021
2022-11-13 12:32:26 library versions: OpenSSL 1.1.1f 31 Mar 2020, LZO 2.10
2022-11-13 12:32:26 Diffie-Hellman initialized with 2048 bit key
2022-11-13 12:32:26 CRL: loaded 1 CRLs from file /etc/openvpn/EasyRSA-3.0.8/pki/crl.pem
2022-11-13 12:32:26 ROUTE_GATEWAY 10.146.0.1
2022-11-13 12:32:26 TUN/TAP device tun0 opened
2022-11-13 12:32:26 /sbin/ip link set dev tun0 up mtu 1500
2022-11-13 12:32:26 /sbin/ip link set dev tun0 up
2022-11-13 12:32:26 /sbin/ip addr add dev tun0 192.168.200.1/24
2022-11-13 12:32:26 /sbin/ip route add 192.168.201.0/24 via 192.168.200.2
2022-11-13 12:32:26 Socket Buffers: R=[212992->212992] S=[212992->212992]
2022-11-13 12:32:26 UDPv4 link local (bound): [AF_INET][undef]:1194
2022-11-13 12:32:26 UDPv4 link remote: [AF_UNSPEC]
2022-11-13 12:32:26 GID set to nogroup
2022-11-13 12:32:26 UID set to nobody
2022-11-13 12:32:26 MULTI: multi_init called, r=256 v=256
2022-11-13 12:32:26 IFCONFIG POOL IPv4: base=192.168.200.2 size=252
2022-11-13 12:32:26 ifconfig_pool_read(), in='a910-router,192.168.200.8,'
2022-11-13 12:32:26 succeeded -> ifconfig_pool_set(hand=6)
2022-11-13 12:32:26 IFCONFIG POOL LIST
2022-11-13 12:32:26 a910-router,192.168.200.8,
2022-11-13 12:32:26 Initialization Sequence Completed
2022-11-13 12:33:58 163.215.6.1:59913 TLS: Initial packet from [AF_INET]163.215.6.1:59913, sid=dd937563 16609f0c
2022-11-13 12:33:58 163.215.6.1:59913 WARNING: Failed to stat CRL file, not reloading CRL.
2022-11-13 12:33:58 163.215.6.1:59913 VERIFY OK: depth=1, CN=cdsl-vm-2
2022-11-13 12:33:58 163.215.6.1:59913 VERIFY OK: depth=0, CN=a910-router
2022-11-13 12:33:58 163.215.6.1:59913 peer info: IV_VER=2.4.1
OpenVPNサーバの設定変更¶
cd /etc/openvpn/EasyRSA-3.0.8
# easyrsaコマンドを実行する.オプションをつける.
sudo ./easyrsa
# CRL(証明書失効リスト)を再生成する場合
sudo ./easyrsa gen-crl
# OpenVPNサーバを再起動
sudo systemctl restart openvpn@server
参考: openvpnで CRL has expired が出た場合の対応 | ハックノート
OpenVPNクライアントのネットワーク設定¶
Router2(dmz-router)の設定を以下に示す.
$ ip route
Destination Gateway Genmask Flags Metric Ref Use Type Iface
default 10.203.63.1 0.0.0.0 UG 0 0 0 WAN0 eth4
10.200.70.35 10.203.63.1 255.255.255.255 UGH 0 0 0 WAN0 eth4
10.203.63.0 * 255.255.255.0 U 0 0 0 WAN0 eth4
10.203.63.1 * 255.255.255.255 UH 0 0 0 WAN0 eth4
192.168.200.0 * 255.255.255.0 U 0 0 0 tun14
192.168.201.0 * 255.255.255.0 U 0 0 0 LAN br0
OpenVPNクライアントのネットワーク設定¶
OpenVPNの設定は,VPN→VPNフュージョンで設定できる. 注意すべきポイントは,Apply to all devicesにチェックをいれることである. ここにチェックを入れない場合,192.168.200.0/24以外の宛先の外向き通信が学内経由で送信されてしまう.これはDMZの目的である学内からの隔離ができず問題になる.
