EdgeRouter X – 7. 自宅と実家の2つの LAN を拠点間 VPN でつなぐ ( OpenVPN )

さあ、とうとうここまで来ました。私がルーターを買おうと思ったきっかけの1つ、拠点間 VPN ( site-to-site VPN ) の設定です。 対象ファームウェアは 1.9.1 です。

拠点間 VPN とは

要はリモートアクセスでない VPN ということです。ある2つの拠点の間に設置されている常設の VPN トンネルで、主に離れている2つの LAN をインターネット経由で1つにつなぐ役割を担います。拠点間 VPN でつながれた2つの LAN はプライベート IP アドレスであっても互いに通信でき、ファイルのやり取りや画面共有、遠隔ログインなどが簡単にできるようになります。また、後述の VPN トンネルを介したルーティングの設定にもこの拠点間 VPN が必要になります。

Open VPN vs IPsec

ER-X は拠点間用の VPN プロトコルとして OpenVPNIPsec が使えます。それぞれメリットデメリットがありますが、ざっと下記のような感じです。

OpenVPN IPsec
設定 簡単 難しい
スピード 遅い 速い
Firewall に ブロックされにくい ブロックされやすい
ダイナミック IP OK 苦手
ルーティング 対応 GRE を使えば対応

OpenVPN は設定が簡単で最悪 https が通ればどんな環境でも動きますが、スピードが遅いです。 IPsec はスピードが速いですが、環境によってはブロックされたり(ポート 4500 を遮断されたりすると使えない)、ルーターが固定 IP アドレスでなくダイナミック IP アドレスだとルーティング可能なトンネルを設定するのがすごく難しくなります。今回はまず OpenVPN で拠点間 VPN を設定してみます。

前提条件

設定の前提となる条件は次の通りです。大抵のご家庭は WAN 側 IP アドレスがダイナミック IP アドレスだと思います。今回は2つの拠点に1つずつ ER-X を置いたものとします。

自宅 実家
DDNS yaberouter1.duckdns.org yaberouter2.duckdns.org
WAN 側 ポート eth0 pppoe0
WAN 側 IP アドレス ダイナミック / DHCP ダイナミック / PPPoE
LAN 側 ポート switch0 switch0
LAN 側 ネットワーク 192.168.1.0/24 192.168.2.0/24
OpenVPN トンネル IP アドレス 192.168.111.1 192.168.111.2

このような前提条件で、 site-to-site OpenVPN を設定してみます。


自宅側

まずは自宅側 ER-X から CLI で設定します。

## 共通鍵を作成 (Operational Mode でコマンド実行)
generate vpn openvpn-key /config/auth/secret

## その共通鍵をコピペでもう1台の ER-X に移す
sudo cat /config/auth/secret
表示された内容をクリップボードにコピー

## 共通鍵のパーミッションを変更
chmod 600 /config/auth/secret

## 設定モードに入る
configure

## vtun0 という名前の OpenVPN インターフェースを作成
set interfaces openvpn vtun0
set interfaces openvpn vtun0 mode site-to-site

## OpenVPN のプロトコルを指定
set interfaces openvpn vtun0 protocol udp

## OpenVPN が使うポート番号を設定
set interfaces openvpn vtun0 local-port 1194
set interfaces openvpn vtun0 remote-port 1194

## OpenVPN のトンネルの IP アドレスを設定
set interfaces openvpn vtun0 local-address 192.168.111.1
set interfaces openvpn vtun0 remote-address 192.168.111.2

## 実家のルーターのホスト名を設定
set interfaces openvpn vtun0 remote-host yaberouter2.duckdns.org

## 共通鍵の場所を指定
set interfaces openvpn vtun0 shared-secret-key-file /config/auth/secret

## 色々な OpenVPN のオプションを設定
set interfaces openvpn vtun0 openvpn-option "--comp-lzo"
set interfaces openvpn vtun0 openvpn-option "--float"
set interfaces openvpn vtun0 openvpn-option "--ping 10"
set interfaces openvpn vtun0 openvpn-option "--ping-restart 20"
set interfaces openvpn vtun0 openvpn-option "--ping-timer-rem"
set interfaces openvpn vtun0 openvpn-option "--persist-tun"
set interfaces openvpn vtun0 openvpn-option "--persist-key"
set interfaces openvpn vtun0 openvpn-option "--user nobody"
set interfaces openvpn vtun0 openvpn-option "--group nogroup"
set interfaces openvpn vtun0 openvpn-option "--fragment 1280"

## 実家側の LAN にアクセスする時に OpenVPN を使うよう Static Route 設定
set protocols static interface-route 192.168.2.0/24 next-hop-interface vtun0

## 設定を保存する
commit
save

## Operational Mode に戻る
exit

つづいて Firewall で OpenVPN を通すようルールを追加します。

ER-X に管理者アカウントでログインし、 Firewall/NAT タブをクリック
Firewall Policies タブをクリック
WAN_LOCAL の Actions ボタンを押し、 Edit Ruleset を選ぶ

Add New Rule ボタンを押す
[Basic]
Description: Allow OpenVPN
Action: Accept
Protocol: Both TCP and UDP
[Destination]
Port: 1194
Save ボタンを押す

追加したルールを元からある Allow established/related と Drop invalid state の間に移動する
Save Rule Order ボタンを押す
WAN_LOCAL の設定ウィンドウを閉じる

実家側

続いて実家の ER-X を CLI で設定します。自分は自宅でリモートアクセス VPN の設定までしたものを実家に持ち込み、その後自宅の Mac から L2TP で実家の ER-X にアクセスして設定しました。設定を間違えると実家に一切アクセスできなくなったりするリスクがあるので細心の注意で設定します。

## 共通鍵をもう1台の ER-X に移す (Operational Mode で入力)
cat > /config/auth/secret
共通鍵をクリップボードからペースト
CTRL-D を押す

## 共通鍵のパーミッションを変更
chmod 600 /config/auth/secret

## 設定モードに入る
configure

## vtun0 という名前の OpenVPN インターフェースを作成
set interfaces openvpn vtun0
set interfaces openvpn vtun0 mode site-to-site

## OpenVPN のプロトコルを指定
set interfaces openvpn vtun0 protocol udp

## OpenVPN が使うポート番号を設定
set interfaces openvpn vtun0 local-port 1194
set interfaces openvpn vtun0 remote-port 1194

## OpenVPN のトンネルの IP アドレスを設定
set interfaces openvpn vtun0 local-address 192.168.111.2
set interfaces openvpn vtun0 remote-address 192.168.111.1

## 自宅のルーターのホスト名を設定
set interfaces openvpn vtun0 remote-host yaberouter1.duckdns.org

## 共通鍵の場所を指定
set interfaces openvpn vtun0 shared-secret-key-file /config/auth/secret

## 色々な OpenVPN のオプションを設定
set interfaces openvpn vtun0 openvpn-option "--comp-lzo"
set interfaces openvpn vtun0 openvpn-option "--float"
set interfaces openvpn vtun0 openvpn-option "--ping 10"
set interfaces openvpn vtun0 openvpn-option "--ping-restart 20"
set interfaces openvpn vtun0 openvpn-option "--ping-timer-rem"
set interfaces openvpn vtun0 openvpn-option "--persist-tun"
set interfaces openvpn vtun0 openvpn-option "--persist-key"
set interfaces openvpn vtun0 openvpn-option "--user nobody"
set interfaces openvpn vtun0 openvpn-option "--group nogroup"
set interfaces openvpn vtun0 openvpn-option "--fragment 1280"

## 自宅側の LAN にアクセスする時に OpenVPN を使うよう Static Route 設定
set protocols static interface-route 192.168.1.0/24 next-hop-interface vtun0

## 設定を保存する
commit
save

## Operational Mode に戻る
exit

つづいて Firewall で OpenVPN を通すようルールを追加します。

ER-X に管理者アカウントでログインし、 Firewall/NAT タブをクリック
Firewall Policies タブをクリック
WAN_LOCAL の Actions ボタンを押し、 Edit Ruleset を選ぶ

Add New Rule ボタンを押す
[Basic]
Description: Allow OpenVPN
Action: Accept
Protocol: Both TCP and UDP
[Destination]
Port: 1194
Save ボタンを押す

追加したルールを元からある Allow established/related と Drop invalid state の間に移動する
Save Rule Order ボタンを押す
WAN_LOCAL の設定ウィンドウを閉じる

これで設定できました。 Operational Mode で下記のコマンドを入力すると OpenVPN トンネルのステータスが確認できます。

show interfaces openvpn
show interfaces openvpn detail
show openvpn status site-to-site

OpenVPN トンネルが確立していれば、ここから2つの LAN が相互にいつも通信できるようになります。例えば実家側の ER-X には https://192.168.2.1/ と入力するだけで、L2TP の接続等しなくてもいつでもアクセスできます。ファイルの転送や画面共有も同じように相手の IP アドレスを指定するだけです。もちろん LAN 内の端末の IP アドレスは全部固定化しておきましょう。

設定を見ればわかるように、 OpenVPN は WAN 側のインターフェースが eth0 だろうが pppoe0 だろうが関係ありません。また必要なポートは1つだけ、かつ自由に設定できるので、ほとんどのポートがブロックされているような環境でも、ポート 443 等の絶対に閉じられることがないポートを使うことによって、ほぼ確実に VPN を確立することができます。これが OpenVPN が簡単でどんな環境でも動くと云われる所以です。

今回はこのページを参考にしました。

EdgeMAX: OpenVPN Site-to-Site

お疲れ様でした。さて続いては site-to-site IPsec です。


Home > Gadgets > EdgeRouter X – 7. 自宅と実家の2つの LAN を拠点間 VPN でつなぐ ( OpenVPN )