LoginSignup
10
10

SoftLayerとVyOSでネットワークの基礎を勉強3-(OpenVPNリモートアクセス編)

Last updated at Posted at 2016-05-30

1. はじめに

VyOSを使ってVPNリモートアクセスを構築するには、L2TP、PPTP構成などがありますが、今回はOpenVPNを使用して構築します。
 SoftLayer上のVyOSにOpenVPNリモートアクセスの設定を行い、リモートのクライアントPCから接続します。
 VyOSのL2TP構成では、同時接続が1ユーザーのみとなっていましたがOpenVPNではこの問題がありません。
L2TPでの構築については、
SoftLayerとVyOSでネットワークの基礎を勉強2-(L2TP/IPsecリモートアクセス編)をご覧ください。
http://qiita.com/Mitsu-Murakita/items/990f0f4151a5b0485731

2. OpenVPNについて

オープンソース、GPLで提供されています。
WindowsやLinux、MacOSなど、いろいろなOSで利用可能。また、クライアントはiOSやAndroidでも利用できます。

OpenVPNのサイト  https://openvpn.net/

3. 構成について

 SoftLayerTokyoロケーションにOpenVPN(VyOS)サーバを設定し、インターネット経由でクライアントPCを接続します。
VPN接続後Cent6サーバーにSSH接続を行い、使用できることを確認します。01.png
02.png
クライアントIPプール用にPrivate Portable IPを構成しています。
IPプール: 10.132.42.52~10.132.42.62

4.全体の流れ

03.png
①鍵の作成と署名
②VyOS設定
③クライアントPCの設定
④接続確認
で作業完了です。

5.サーバー側、クライアント側秘密鍵・公開鍵の作成

eth0、eth1、gateway-address、ssh等の設定は省略します。
「SoftLayer仮想サーバにVyOSをインストールしました」の「9. ⑦ VyOSネットワークの設定」を参考に設定してください。
http://qiita.com/Mitsu-Murakita/items/d793250566a8e9f3562b

以降はSSH接続(TeraTerm等)できている前提で、話を進めます。

5-1. rootアカウントの有効化

認証局、鍵を作成するにはOSのコマンドプロンプトから実行します。
このコマンドプロンプトに入るために、VyOSの構成でrootアカウントを有効にします。
VyOSには、
・一般モード(プロンプトが$)
・設定モード(プロンプトが#)
がありますが、最初は一般モードになっていますので、「configure」⏎で設定モードにしてから入力します。
また、

rootアカウントの有効化
# set system login user root authentication plaintext-password rootのパスワード ⏎
# commit ⏎
# save ⏎

rootのパスワードは、このインスタンス用にSoftLayerでアサインされたrootのパスワードです。
04.png

5-2. 認証局の構築

初回の時だけ実行し、運用中は実行しないでください。
05.png
① rootユーザーでログイン「su - ⏎」
② rootユーザーでログイン パスワード入力。
③今回使用するVyOSに付属のOpenVPNプログラム類は、/usr/share/doc/openvpn/examples/easy-rsa/2.0/ディレクトリーにあります。
④varsの呼び出し、環境変数の設定
「. ./vars ⏎」
⑤古い鍵ファイル類の消去、認証局の初期化
「./clean-all 」
⑥認証局の作成
「./build-ca ⏎」
⑦国名コード
⑧都道府県名
⑨都市名
⑩組織名。社名や団体名
⑪省略
⑫共通名
⑬省略
⑭認証局の管理者のメールアドレス

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
CA証明書---ca.crt
CA秘密鍵---ca.key

5-3. サーバー側の秘密鍵・公開鍵の作成と署名

初回の時だけ実行し、運用中は実行しないでください。
06.png
ここではサーバー側の鍵名称を「server」とします。
①サーバー側鍵作成
「./build-key-server server ⏎」
②国名コード
③都道府県名
④都市名
⑤組織名。社名や団体名
⑥「⏎」
⑦「⏎」
⑧メールアドレス
⑨今回チャレンジパスワードの設定は行わない。
「⏎」
⑩「⏎」
⑪「y ⏎」
⑫「y ⏎」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
サーバー証明書---server.crt
サーバー秘密鍵---server.key

5-4. クライアント側の秘密鍵・公開鍵の作成と署名

ここではクライアント側の鍵名称を「client」とします。
必要なクライアント数分、名称を変えて繰り返します。
07.png
①クライアント側鍵作成
「./build-key client ⏎」
②国名コード
③都道府県名
④都市名
⑤組織名。社名や団体名
⑥「⏎」
⑦「⏎」
⑧「⏎」
⑨メールアドレス
⑩今回チャレンジパスワードの設定は行わない。
「⏎」
⑪「⏎」
⑫「y ⏎」
⑬「y ⏎」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
クライアント証明書---client.crt
クライアント秘密鍵---client.key

5-5. DHパラメータの作成

鍵の交換に使用するDHパラメータを生成します。
08.png
①「./build-dh ⏎」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成
dh1024.pem

5-6. 鍵を所定ディレクトリーへコピー

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されていますので、サーバー用とクライアント用別にそれぞれコピーします。
クライアント環境は以降でセットアップしますので、その時使用します。
<サーバー用>
・ca.crt
・dh1024.pem
・server.crt
・server.key
<クライアント用>
・ca.crt
・client.crt
・client.key

ここではサーバー用のファイルを、/root配下にコピーしました。
(ちなみに、/config/auth/に保存すると、VyOSのバージョンアップ時に消されずにバージョンアップできるようです。)

6.VyOSの設定

VyOSの基本設定は「5.サーバー側、クライアント側秘密鍵・公開鍵の作成」で完了しているものとして話を進めます。

構成で設定するのは、「OpenVPN」「NAT」です。

OpenVPNの設定
(01) # set interfaces openvpn vtun0 ⏎
(02) # set interfaces openvpn vtun0 mode server⏎
(03) # set interfaces openvpn vtun0 openvpn-option "--push route 10.0.0.0 255.0.0.0  --push dhcp-option DNS 10.0.80.11" ⏎
(04) # set interfaces openvpn vtun0 server client client ip 10.132.42.50 ⏎
(05) # set interfaces openvpn vtun0 server subnet 10.132.42.48/28 ⏎
(06) # set interfaces openvpn vtun0 tls ca-cert-file /root/ca.crt ⏎
(07) # set interfaces openvpn vtun0 tls cert-file /root/server.crt ⏎
(08) # set interfaces openvpn vtun0 tls dh-file /root/dh1024.pem ⏎
(09) # set interfaces openvpn vtun0 tls key-file /root/server.key ⏎
(10) # commit ⏎
(11) # save ⏎

※実際に入力する際は、行番号を入れないように。
(03) SoftLayer側のルート(10.0.0.0 255.0.0.0)とDNS(10.0.80.11)をpushしています。
"redirect-gateway def1"オプションを入れてもいいです。
(04)クライアントの名前は「client」で、client.crt/client.keyを使用します。
また、プライベートポータブルIPからIPを切りだして、10.132.42.50をアサインしています。
(05)サブネットはプライベートポータブルのネットワーク(10.132.42.48/28)です。
(06)CA証明書の保存場所
(07)サーバー証明書の保存場所
(08)DHファイルの保存場所
(09)サーバー秘密鍵の保存場所

ここまでの設定では、OpenVPN接続しクライアント用のIPが取得できますが、SoftLayerのDNSや、プライベートネットワーク上の他のサーバーと通信するために、NATの設定を行います。

NATの設定
(01) # set nat source rule 1 ⏎
(02) # set nat source rule 1 outbound-interface eth0 ⏎
(03) # set nat source rule 1 source address 10.132.42.48/28 ⏎
(04) # set nat source rule 1 translation address masquerade ⏎
(05) # commit ⏎
(06) # save ⏎

※実際に入力する際は、行番号を入れないように。
SourceNATを設定しています。
(02) プライベートのインターフェースはeth0
(03)source アドレスは、プライベートポータブルです
(04)マスカレードの設定にしました

これで、クライアントPCからプライベートネットワーク上の他のサーバーへPINGが通ります。

全体構成例
interfaces {
     ethernet eth0 {
         address 10.132.52.229/26
         duplex auto
         hw-id 06:64:e1:be:f5:79
         smp_affinity auto
         speed auto
     }
     ethernet eth1 {
         address 161.202.104.109/29
         duplex auto
         hw-id 06:f3:4d:9a:db:f3
         smp_affinity auto
         speed auto
     }
     loopback lo {
     }
     openvpn vtun0 {
         mode server
         openvpn-option "--push route 10.0.0.0 255.0.0.0  --push dhcp-option DNS  10.0.80.11"
         server {
             client client {
                 ip 10.132.42.50
             }
             subnet 10.132.42.48/28
         }
         tls {
             ca-cert-file /root/ca.crt
             cert-file /root/server.crt
             dh-file /root/dh1024.pem
             key-file /root/server.key
         }
     }
 }
 nat {
     source {
         rule 1 {
             outbound-interface eth0
             source {
                 address 10.132.42.48/28
             }
             translation {
                 address masquerade
             }
         }
     }
 }
 protocols {
     static {
         route 10.0.0.0/8 {
             next-hop 10.132.52.193 {
             }
         }
     }
 }
 service {
     ssh {
         port 22
     }
 }
 system {
     config-management {
         commit-revisions 20
     }
     console {
         device hvc0 {
             speed 9600
         }
         device ttyS0 {
             speed 9600
         }
     }
     gateway-address 161.202.104.105
     host-name vyos
     login {
         user root {
             authentication {
                 encrypted-password $6$Q0pf7AroZmY$MK7zWwUJdBbY4wsZ94/ZCDkSk9068 /LeYM6G.B7a.hOdHhjnAZtRNqVPkvr1obJFxFFzygEE1vINpK74vR92s.
                 plaintext-password ""
             }
             level admin
         }
         user vyos {
             authentication {
                 encrypted-password $1$4c8nA5Q/$Jdf4lZMTVMebY9d64llpE1
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     ntp {
         server 0.pool.ntp.org {
         }
         server 1.pool.ntp.org {
         }
         server 2.pool.ntp.org {
         }
     }
     package {
         auto-sync 1
         repository community {
             components main
             distribution helium
             password ""
             url http://packages.vyos.net/vyos
             username ""
         }
     }
     syslog {
         global {
             facility all {
                 level notice
             }
             facility protocols {
                 level debug
             }
         }
     }
     time-zone UTC
 }

7.クライアントPCの設定

7-1.OpenVPNクライアントプログラムのダウンロード

OpenVPNクライアントプログラムは下記サイトより、ダウンロードしてください。
https://www.openvpn.jp/download/
10.png
クライアントPCがWindows10(32bit)ですので「openvpn-install-2.3.11-I601-i686.exe」を使用しました。
09.png

7-2.OpenVPNクライアントプログラムのインストール

「openvpn-install-2.3.11-I601-i686.exe」を実行。

11.png
「Next」

12.png
「I Agree」

13.png
「Next」

14.png
「Next」
ここでは導入フォルダーを"ProgramFiles\OpenVPN"にしました。

15.png

16.png
「Next」

17.png
「Finish」

7-3.CA証明書、クライアント証明書、クライアント秘密鍵のコピー

サーバー側で作成したca.crt、client.crt、client.keyを
”c:\Program Files\OpenVPN\config"フォルダーへコピーします。
18.png

7-2.OpenVPNクライアント設定の編集

19.png
「OpenVPN」起動

21.png
「インジケータ」のOpenVPNアイコン上で、マウス右ボタンを押し、メニューを表示

22.png
「設定の編集」

23.png
remoto "OpenVPNサーバーのパブリックIP"
ca "CA証明書"
cert "クライアント証明書"
key "クライアント秘密鍵"
を編集し、保存。

8.接続確認

8-1.OpenVPNの接続

24.png
「インジケータ」のOpenVPNアイコン上で、マウス右ボタンを押し、メニューを表示⇒「接続」

25.png
接続中です。

26.png
「10.132.42.50」に接続されました。

8-2.PINGとSSHで確認

クライアントPCのコマンドプロンプトより、
・VyOSサーバー(10.132.52.229)
・Cent6サーバー(10.132.52.225)
に対してPINGが通る事を確認。
27.png

28.png
VyOSサーバーとの接続確認完了
29.png
Cent6サーバーとの接続確認完了

9. おわりに

実運用の際は、ファイアーウォールの設定を必ず行ってください。
また、VyOS冗長化するにはVRRPを使用しますが、OpenVPN接続が標準ではUDP接続のため、TCPにする必要があります。今後書く予定です。

10
10
0

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
10
10