さあ、とうとうここまで来ました。私がルーターを買おうと思ったきっかけの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 プロトコルとして OpenVPN と IPsec が使えます。それぞれメリットデメリットがありますが、ざっと下記のような感じです。
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 が簡単でどんな環境でも動くと云われる所以です。
今回はこのページを参考にしました。
お疲れ様でした。さて続いては site-to-site IPsec です。
yabe.jp » Gadgets »