概要

  • 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 チャンネルに以下の通知が流れる.

Screenshot 2023-04-02 at 17.12.59.png (55.5 kB)

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

Screenshot 2023-04-02 at 17.14.04.png (51.0 kB)

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の目的である学内からの隔離ができず問題になる.

Screenshot 2023-04-02 at 16.58.14.png (1.1 MB)