LoginSignup
11

More than 5 years have passed since last update.

VyOSでプライベートIPの自宅ネットワークにリモートアクセスしたい!(OpenVPN編)

Last updated at Posted at 2017-08-16

(2017/8/18)最後の(おまけ2)OpenVPN上でOSPFの経路交換を動作させるは動作が安定しなかったので、Staticによる経路交換を行うようにしてください

我が家はマンション専用プロバイダと契約していることもあり、DHCPでプライベートIPアドレス(10.XXX.YYY.ZZZ/22)がマンション側で管理している機器から振ってくる。そのため、外部から自宅にリモートアクセスするには別のグローバルIPがもらえるプロバイダとの契約しかないと思っていた。
しかし、その打開策を考えたので今回はそのネットワーク環境を構築していく。

ネットワーク図

自宅VPN_ネットワーク図.jpg
簡単な説明としては、さくらクラウドに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

これで、リモート端末への経路と外部からアクセスしたい自宅サーバへの経路が各ルーターから確認できれば完了

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11