(2017/8/18)最後の(おまけ2)OpenVPN上でOSPFの経路交換を動作させる
は動作が安定しなかったので、Staticによる経路交換を行うようにしてください
我が家はマンション専用プロバイダと契約していることもあり、DHCPでプライベートIPアドレス(10.XXX.YYY.ZZZ/22)がマンション側で管理している機器から振ってくる。そのため、外部から自宅にリモートアクセスするには別のグローバルIPがもらえるプロバイダとの契約しかないと思っていた。
しかし、その打開策を考えたので今回はそのネットワーク環境を構築していく。
#ネットワーク図
簡単な説明としては、さくらクラウドにVyOS(グローバルIP付き)を一台立てて、それと自宅のVyOSをVPN(OpenVPN)で接続する。また、外部から接続する場合は、さくらクラウドのVyOSにVPN(L2TP over IPsec)で接続する。これによって、リモートでのSSHアクセス等が可能になる。
その構築を「環境構築編」,「OpenVPN編」,「L2TP over IPsec編」と3つの記事で説明する。
OpenVPN編
今回は、前回の環境構築編に続き、自宅VyOSとさくらクラウドVyOS間をOpenVPNで繋ぐ方法を書いていきます。
https://wiki.vyos.net/wiki/OpenVPNを参考にしていて、本記事はこれを見れば必要ないというくらいです。汗
ちなみにVPNにOpenVPNを選定した理由としては、L2TP over IPsecより高速であること(噂)、VyOSのConfig的にOpenVPN上でOSPFを簡単に張ったりできそうだったためである。
VyOSの各VPN(L2TP over IPsec,OpenVPN,PPTP?)には、site to siteという拠点間接続用のConfigができるが、今回は自宅VyOSがプライベートIPしかないというデス環境なので、これは行わない。
認証局,鍵,DHパラメータの作成等
さくらクラウドのVyOS(Server側)
さくらクラウドのVyOSはOpenVPNのserver
として動作させる。
vyosにログイン後、sudo環境での作業を楽にするためにrootアカウントの有効化をします。
# 設定モードに入る
configure
# rootパスワード設定
set system login user root authentication plaintext-password rootのパスワード
# 変更のコミットおよび設定保存
commit
save
rootユーザでログインする
$ su -
[設定したrootパスワードの入力]
- OpenVPN環境変数の設定
$ cp -rv /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /config/easy-rsa2-my
$ cd /config/easy-rsa2-my
$ vi vars
(以下の部分を各自の環境に編集)
export KEY_COUNTRY="US" ←サーバーの所在国を指定(日本なら"JP")
export KEY_PROVINCE="CA" ←サーバーの所在地(都道府県)を設定(東京なら"Tokyo")
export KEY_CITY="SanFrancisco" ←サーバーの所在地(市区町村)を設定(秋葉原なら"Akihabara")
export KEY_ORG="Fort-Funston" ←サーバーの所有団体の設定(例.hogehoge.com)
export KEY_EMAIL="me@myhost.mydomain" ←サーバーの所有者のE-mailアドレス(例.root@hogehoge.com)
~
編集後、OpenVPN環境変数の設定ファイルの反映を行う。
$ source vars
- 認証局,鍵,DHパラメータファイルの初期化(初回のみ)
$ ./clean-all
~以降のShellはEnterゲーです~
shell実行後は、入力を求められたらEnterです。
[y/n]を求められたらyです。
openvpn.jpのHow toを読むと設定の詳細が理解できるかと思います。
- 認証局の証明書・鍵作成
$ ./build-ca
- サーバー側の証明書・鍵作成
$ ./build-key-server server
- クライアント側の証明書・鍵作成
$ ./build-key client
- DHパラメータの作成
$ ./build-dh
- 作成されたサーバー関係のファイル(ca.crt,dh1024.pem,server.key,server.crt)をさくらクラウドのVyOSのディレクトリにコピーする
$ mkdir /config/auth/ovpn
$ cp keys/ca.crt /config/auth/ovpn/
$ cp keys/dh1024.pem /config/auth/ovpn/
$ cp keys/server.key /config/auth/ovpn/
$ cp keys/server.crt /config/auth/ovpn/
自宅のVyOS(Client側)
自宅のVyOSはOpenVPNのclient
として動作させる。
- さくらクラウドのVyOSで作成されたクライアント関係のファイル(ca.crt, client.key and client.crt)を自宅のVyOSのディレクトリにコピーする(Cyberduck等を利用してSFTPでコピーするのが早い)
$ mkdir /config/auth/ovpn
[SFTP等でさくらクラウドのVyOSのca.crt, client.key and client.crtを自宅VyOSの`/config/auth/ovpn/`にコピーする]
interface openvpnの設定
ここまでで設定した、認証局,鍵,DHパラメータファイルを参照して、interface openvpnを作成していく。
さくらクラウドのVyOS(Server側)
# 設定モードに入る
configure
# serverモードでvtun0を作成
set interfaces openvpn vtun0 mode server
# openvpnセッションのsubnetを設定(任意)
# serverが192.168.20.1/24となる
# clientには接続順で192.168.20.2 ~ 192.168.20.254で振られる
set interfaces openvpn vtun0 server subnet 192.168.20.0/24
# OpenVPN(Server)に必要な各ファイルを参照させる
set interfaces openvpn vtun0 tls ca-cert-file '/config/auth/ovpn/ca.crt'
set interfaces openvpn vtun0 tls cert-file '/config/auth/ovpn/server.crt'
set interfaces openvpn vtun0 tls dh-file '/config/auth/ovpn/dh1024.pem'
set interfaces openvpn vtun0 tls key-file '/config/auth/ovpn/server.key'
# 変更のコミットおよび設定保存
commit
save
自宅のVyOS(Client側)
# 設定モードに入る
configure
# clientモードでvtun0を作成
set interfaces openvpn vtun0 mode client
# OpenVPN Serverの指定
set interfaces openvpn vtun0 remote-host [さくらクラウドのVyOSのグローバルIP]
# OpenVPN(client)に必要な各ファイルを参照させる
set interfaces openvpn vtun0 tls ca-cert-file '/config/auth/ovpn/ca.crt'
set interfaces openvpn vtun0 tls cert-file '/config/auth/ovpn/client.crt'
set interfaces openvpn vtun0 tls key-file '/config/auth/ovpn/client.key'
# 変更のコミットおよび設定保存
commit
save
##OpenVPN確認
正しくOpenVPN接続ができているか確認する。
- さくらクラウドのVyOSから確認
$ show openvpn server status
- 自宅のVyOSから確認
$ show openvpn client status
- pingで確認
さくらクラウドのVyOSから
$ ping 192.168.20.2
自宅VyOSで
$ sudo tcpdump -i vtun0
tcpdumpでicmpパケットが192.168.20.1から届いていることが確認できればOK!!
(おまけ1)OpenVPN上をStaticに経路交換を動作させる
後に、L2TP over IPsecで接続するリモート端末への経路と外部からアクセスしたい自宅サーバへの経路を各VyOSで経路交換する必要があるので、以下のConfigにより経路交換を行う。
Tunnel IPの部分は$ show interface
を行うと確認できます。
さくらクラウドのVyOS
# 設定モードに入る
configure
# ポイントツーポイント(2つのルータで構成されるネットワーク)を指定
set interfaces openvpn vtun0 server topology point-to-point
# server側とclient側を対応付ける
set interfaces openvpn vtun0 server client (client名) ip 192.168.20.2(clientに割り振られたTunnel IP)
# client側のローカルネットワークがOpenVPNを経由することを設定
set interfaces openvpn vtun0 server client (client名) subnet 192.168.10.0/24(リモートアクセスしたい自宅のネットワークアドレス)
# 自宅のローカルネットワークにアクセスするための経路を自宅VyOSに広告する
set protocols static route 192.168.10.0/24 next-hop 192.168.20.2
# 変更のコミットおよび設定保存
commit
save
自宅のVyOS
# 設定モードに入る
configure
# 自宅のローカルネットワークへのアクセスを広告することを明示的に設定(おそらく必要ない)
set interfaces openvpn vtun0 openvpn-option "--push route 192.168.1.0 255.255.255.0"
# L2TP over IPsec(リモート)から自宅のローカルネットワークへの経路をさくらクラウドのVyOSに広告する
set protocols static route [L2TP over IPsecで外部の端末と接続する際のネットワークアドレス/32] next-hop 192.168.20.1(serverに割り振られたTunnel IP)
# 変更のコミットおよび設定保存
commit
save
Static経路確認コマンド
ルーティングテーブルから正しく経路が見れるか確認
$ show ip route
これで、リモート端末への経路と外部からアクセスしたい自宅サーバへの経路が各ルーターから確認できれば完了
(おまけ2)OpenVPN上でOSPFの経路交換を動作させる
(2017/8/17)OSPFの経路交換の不足を更新
(おまけ1)で経路交換を行うようにしてください
後に、L2TP over IPsecで接続するリモート端末への経路と外部からアクセスしたい自宅サーバへの経路を各VyOSで経路交換する必要があるので、以下のConfigによりOSPFを動作させる。
さくらクラウドのVyOS
# 設定モードに入る
configure
# OSPFの各パラメータを設定(defaultと同じ設定だが明示的に設定)
set interfaces openvpn vtun0 ip ospf dead-interval 40
set interfaces openvpn vtun0 ip ospf hello-interval 10
set interfaces openvpn vtun0 ip ospf retransmit-interval 5
set interfaces openvpn vtun0 ip ospf transmit-delay 1
# 経路交換するネットワークを設定
set protocols ospf area 0 network 192.168.20.0/24
set protocols ospf area 0 network 192.168.20.xxx/32(server側に割り当てられたTunnel IP)
set protocols ospf area 0 network [L2TP over IPsecで外部の端末と接続する際のネットワーク]
# vtun0以外にはHelloパケットを流さないよう設定
set protocols ospf passive-interface default
set protocols ospf passive-interface-exclude vtun0
# 変更のコミットおよび設定保存
commit
save
自宅のVyOS
# 設定モードに入る
configure
# OSPFの各パラメータを設定(defaultと同じ設定だが明示的に設定)
set interfaces openvpn vtun0 ip ospf dead-interval 40
set interfaces openvpn vtun0 ip ospf hello-interval 10
set interfaces openvpn vtun0 ip ospf retransmit-interval 5
set interfaces openvpn vtun0 ip ospf transmit-delay 1
# 経路交換するネットワークを設定
set protocols ospf area 0 network 192.168.20.0/24
set protocols ospf area 0 network 192.168.20.yyy/32(client側に割り当てられたTunnel IP)
set protocols ospf area 0 network 192.168.10.0/24(外部からアクセスしたい自宅サーバの属するネットワーク)
# vtun0以外にはHelloパケットを流さないよう設定
set protocols ospf passive-interface default
set protocols ospf passive-interface-exclude vtun0
# 変更のコミットおよび設定保存
commit
save
OSPF確認コマンド
ルーティングテーブルから正しく経路交換がされているか確認
$ show ip route
これで、リモート端末への経路と外部からアクセスしたい自宅サーバへの経路が各ルーターから確認できれば完了