Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@tomoyk

ASUSルータとOpenVPNでSite-to-Site VPNを構築

Google Cloudに作成した仮想マシン(VM)とASUSのWi-FiルータをOpenVPNで拠点間VPN(Site-to-Site VPN)を構築しました.拠点間はL3(IPレイヤー)で接続されています.

バージョン・環境

OpenVPNサーバは,構築済みである前提とします.OpenVPNクライアントであるルータは,購入済みであるとします.

  • OpenVPNサーバ
    • Google Compute Engine上の仮想マシン
    • OS: Ubuntu 18.04
    • マシンイメージ: ubuntu-1804-bionic-v20190628
    • マシンタイプ: f1-micro(vCPU x1,メモリ 0.6 GB)
    • OpenVPNバージョン: v2.4.4
      • x86_64-pc-linux-gnu
      • OpenSSL 1.1.1
    • OpenVPNポート: 1194/udp
    • easy-rsaバージョン: v?
  • OpenVPNクライアント
    • 型番: ASUS RT-AX3000
    • ファームバージョン: 3.0.0.4_386_42095

ネットワーク構成

拠点間のネットワークをL3(IPレイヤ)で接続します.

  • OpenVPNサーバのグローバルIP: 163.215.100.100
  • 拠点Aネットワーク
    • プライベートネットワーク: 192.168.201.0/24
    • ゲートウェイ: 192.168.201.1
  • トンネルネットワーク
    • プライベートネットワーク: 192.168.200.0/24
    • ゲートウェイ: 192.168.200.1
  • 拠点Bネットワーク
    • プライベートネットワーク: 10.138.0.0/20
    • ゲートウェイ: 10.138.0.1

技術系ポンチ絵(4).png

設定ファイル

今回は /etc/openvpn の下に easy-rsa/ を配置しています.

OpenVPNサーバのディレクトリ構成 /etc/openvpn

.
├── client
│   └── site-a
├── crl.pem
├── dh.pem
├── easy-rsa
│   ├── build-ca -> /usr/share/easy-rsa/build-ca
│   ├── build-dh -> /usr/share/easy-rsa/build-dh
│   ├── build-inter -> /usr/share/easy-rsa/build-inter
│   ├── build-key -> /usr/share/easy-rsa/build-key
│   ├── build-key-pass -> /usr/share/easy-rsa/build-key-pass
│   ├── build-key-pkcs12 -> /usr/share/easy-rsa/build-key-pkcs12
│   ├── build-key-server -> /usr/share/easy-rsa/build-key-server
│   ├── build-req -> /usr/share/easy-rsa/build-req
│   ├── build-req-pass -> /usr/share/easy-rsa/build-req-pass
│   ├── clean-all -> /usr/share/easy-rsa/clean-all
│   ├── inherit-inter -> /usr/share/easy-rsa/inherit-inter
│   ├── keys
│   │   ├── 01.pem
│   │   ├── 02.pem
│   │   ├── ca.crt
│   │   ├── ca.key
│   │   ├── dh2048.pem
│   │   ├── site-a.crt
│   │   ├── site-a.csr
│   │   ├── site-a.key
│   │   ├── index.txt
│   │   ├── index.txt.attr
│   │   ├── serial
│   │   ├── server.crt
│   │   ├── server.csr
│   │   └── server.key
│   ├── list-crl -> /usr/share/easy-rsa/list-crl
│   ├── openssl-0.9.6.cnf
│   ├── openssl-0.9.8.cnf
│   ├── openssl-1.0.0.cnf
│   ├── pkitool -> /usr/share/easy-rsa/pkitool
│   ├── revoke-full -> /usr/share/easy-rsa/revoke-full
│   ├── revoke-test.pem
│   ├── sign-req -> /usr/share/easy-rsa/sign-req
│   ├── vars
│   └── whichopensslcnf -> /usr/share/easy-rsa/whichopensslcnf
├── ipp.txt
├── server.conf
└── update-resolv-conf

3 directories, 44 files

OpenVPNサーバのサーバ向け設定 server.conf

/etc/openvpn/server.conf
# ポート番号
port   1194

# トンネリングに使うプロトコル
proto  udp

# 接続方式(トンネリング)
dev    tun

# 鍵と証明書
ca          easy-rsa/keys/ca.crt
cert        easy-rsa/keys/server.crt
key         easy-rsa/keys/server.key
dh          dh.pem
crl-verify  crl.pem

# クライアントのIP固定ファイル
ifconfig-pool-persist ipp.txt

# トンネリングネットワーク
server 192.168.200.0 255.255.255.0

# ルーティング設定
route 192.168.201.0 255.255.255.0

# クライアントへの設定
push "redirect-gateway def1 bypass-dhcp"
push "route 10.138.0.0 255.255.240.0"
push "dhcp-option DNS 1.1.1.1"

client-config-dir client

keepalive 10 120

# LZO圧縮を有効に
comp-lzo

# OpenVPNの実行ユーザWIP
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

OpenVPNサーバのクライアント向け設定 client/site-a

/etc/openvpn/client/site-a
; クライアントのIP固定
ifconfig-push 192.168.200.5 192.168.200.6

; ルーティング設定
iroute 192.168.201.0 255.255.255.0

手順

以降では,構築済みのOpenVPNサーバへASUSのWi-Fiルータから接続する手順を説明します.

(1) クライアント用OpenVPN設定ファイル site-a.ovpn の作成

OpenVPNクライアント用の設定ファイル site-a.ovpn を作成します.設定項目の証明書と鍵は,それぞれ対応する以下のファイルの内容を貼り付けます.

  • 認証局証明書
    • 対応するファイル名: easy-rsa/keys/ca.crt
    • ファイルの内容が -----BEGIN CERTIFICATE----- から始まる.
  • クライアント証明書
    • 対応するファイル名: easy-rsa/keys/site-a.crt
    • ファイルの内容が -----BEGIN CERTIFICATE----- から始まる.
  • クライアント秘密鍵
    • 対応するファイル名: easy-rsa/keys/site-a.key
    • ファイルの内容が -----BEGIN RSA PRIVATE KEY----- から始まる.
site-a.ovpn
# クライアントモード
client

# 接続方式(トンネリング)
dev tun

# トンネリングに使うプロトコル
proto udp

# OpenVPNサーバのグローバルIPアドレス
remote 163.215.100.100 1194

# 名前解決の再試行
resolv-retry infinite

# ポート番号をバインド無し
nobind

# 切断後の動作
persist-key
persist-tun

# 認証局証明書
<ca>
-----BEGIN CERTIFICATE-----
xxx
-----END CERTIFICATE-----
</ca>

# クライアント証明書
<cert>
-----BEGIN CERTIFICATE-----
xxx
-----END CERTIFICATE-----
</cert>

# クライアント秘密鍵
<key>
-----BEGIN RSA PRIVATE KEY-----
xxx
-----END RSA PRIVATE KEY-----
</key>

# LZO圧縮を有効に
comp-lzo

# ログレベル
verb 3

(2) ASUSルータにOpenVPNクライアントの設定

ASUSルータのWeb管理画面にログインします.メニューから次のボタンを選んでOpenVPNの設定を開きます.

詳細設定 → VPN → VPNクライアント → プロファイルを追加 → OpenVPN

(1)で作成した site-a.ovpn をアップロードします.

image.png

OKを選びます.OpenVPNサーバとの接続が確立できると,VPNサーバーリストの接続状態にチェックマークが表示されます.

image.png

(3) 接続のテスト

拠点A, 拠点Bのそれぞれから対向の拠点へpingを送って,返答があるかを確かめます.

拠点B→拠点A
koyama@openvpn-server:~$ ping 192.168.201.11
PING 192.168.201.11 (192.168.201.11) 56(84) bytes of data.
64 bytes from 192.168.201.11: icmp_seq=1 ttl=63 time=93.9 ms
64 bytes from 192.168.201.11: icmp_seq=2 ttl=63 time=93.8 ms
64 bytes from 192.168.201.11: icmp_seq=3 ttl=63 time=93.8 ms
^C
--- 192.168.201.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 93.836/93.880/93.919/0.355 ms
拠点A→拠点B
admin@RT-AX3000-6338:/tmp/home/root# ping 10.138.0.3
PING 10.138.0.3 (10.138.0.3): 56 data bytes
64 bytes from 10.138.0.3: seq=0 ttl=64 time=93.611 ms
64 bytes from 10.138.0.3: seq=1 ttl=64 time=93.388 ms
64 bytes from 10.138.0.3: seq=2 ttl=64 time=93.604 ms
^C
--- 10.138.0.3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 93.388/93.534/93.611 ms

これで拠点Aと拠点BがSite-to-Site VPNで接続されました.

付録

ルーティングテーブルを載せておきます

拠点B
koyama@openvpn-server:/etc/openvpn$ ip route
default via 10.138.0.1 dev ens4 proto dhcp src 10.138.0.3 metric 100 
10.138.0.1 dev ens4 proto dhcp scope link src 10.138.0.3 metric 100 
192.168.200.0/24 via 192.168.200.2 dev tun0 
192.168.200.2 dev tun0 proto kernel scope link src 192.168.200.1 
192.168.201.0/24 via 192.168.200.2 dev tun0
拠点A
admin@RT-AX3000-6338:/tmp/home/root# ip route
0.0.0.0/1 via 192.168.200.9 dev tun15 
default via 10.203.63.1 dev eth4 
10.138.0.0/24 via 192.168.200.9 dev tun15 
10.192.31.10 via 10.203.63.1 dev eth4  metric 1 
10.203.63.0/24 dev eth4  proto kernel  scope link  src 10.203.63.57 
10.203.63.1 dev eth4  proto kernel  scope link 
163.215.100.100 via 10.203.63.1 dev eth4 
127.0.0.0/8 dev lo  scope link 
128.0.0.0/1 via 192.168.200.9 dev tun15 
192.168.200.1 via 192.168.200.9 dev tun15 
192.168.200.9 dev tun15  proto kernel  scope link  src 192.168.200.10 
192.168.201.0/24 dev br0  proto kernel  scope link  src 192.168.201.1 
192.168.201.0/24 via 192.168.201.1 dev br0  scope link  metric 1

10.203.63.1 が拠点AのWAN側のゲートウェイです.

参考URL

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tomoyk
🍣🍺🎊
cdsl
東京工科大学コンピュータサイエンス学部クラウド・分散システム研究室

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?