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 が使えます。それぞれメリットデメリットがありますが、ざっと下記のような感じです。

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

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

前提条件

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

自宅実家
DDNSyaberouter1.duckdns.orgyaberouter2.duckdns.org
WAN 側 ポートeth0pppoe0
WAN 側 IP アドレスダイナミック / DHCPダイナミック / PPPoE
LAN 側 ポートswitch0switch0
LAN 側 ネットワーク192.168.1.0/24192.168.2.0/24
OpenVPN トンネル IP アドレス192.168.111.1192.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 vtun0set interfaces openvpn vtun0 mode site-to-site## OpenVPN のプロトコルを指定set interfaces openvpn vtun0 protocol udp## OpenVPN が使うポート番号を設定set interfaces openvpn vtun0 local-port 1194set interfaces openvpn vtun0 remote-port 1194## OpenVPN のトンネルの IP アドレスを設定set interfaces openvpn vtun0 local-address 192.168.111.1set 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## 設定を保存するcommitsave## Operational Mode に戻るexit

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

ER-X に管理者アカウントでログインし、 Firewall/NAT タブをクリックFirewall Policies タブをクリックWAN_LOCAL の Actions ボタンを押し、 Edit Ruleset を選ぶAdd New Rule ボタンを押す[Basic]Description: Allow OpenVPNAction: AcceptProtocol: Both TCP and UDP[Destination]Port: 1194Save ボタンを押す追加したルールを元からある 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 vtun0set interfaces openvpn vtun0 mode site-to-site## OpenVPN のプロトコルを指定set interfaces openvpn vtun0 protocol udp## OpenVPN が使うポート番号を設定set interfaces openvpn vtun0 local-port 1194set interfaces openvpn vtun0 remote-port 1194## OpenVPN のトンネルの IP アドレスを設定set interfaces openvpn vtun0 local-address 192.168.111.2set 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## 設定を保存するcommitsave## Operational Mode に戻るexit

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

ER-X に管理者アカウントでログインし、 Firewall/NAT タブをクリックFirewall Policies タブをクリックWAN_LOCAL の Actions ボタンを押し、 Edit Ruleset を選ぶAdd New Rule ボタンを押す[Basic]Description: Allow OpenVPNAction: AcceptProtocol: Both TCP and UDP[Destination]Port: 1194Save ボタンを押す追加したルールを元からある Allow established/related と Drop invalid state の間に移動するSave Rule Order ボタンを押すWAN_LOCAL の設定ウィンドウを閉じる

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

show interfaces openvpnshow interfaces openvpn detailshow 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 です。


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