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接続を行い、使用できることを確認します。
クライアントIPプール用にPrivate Portable IPを構成しています。
IPプール: 10.132.42.52~10.132.42.62
4.全体の流れ
①鍵の作成と署名
②VyOS設定
③クライアントPCの設定
④接続確認
で作業完了です。
5.サーバー側、クライアント側秘密鍵・公開鍵の作成
eth0、eth1、gateway-addoress、ssh等の設定は省略します。
「SoftLayer仮想サーバにVyOSをインストールしました」の「9. ⑦ VyOSネットワークの設定」を参考に設定してください。
http://qiita.com/Mitsu-Murakita/items/d793250566a8e9f3562b
以降はSSH接続(TeraTerm等)できている前提で、話を進めます。
5-1. rootアカウントの有効化
認証局、鍵を作成するにはOSのコマンドプロンプトから実行します。
このコマンドプロンプトに入るために、VyOSの構成でrootアカウントを有効にします。
VyOSには、
・一般モード(プロンプトが$)
・設定モード(プロンプトが#)
がありますが、最初は一般モードになっていますので、「configure」⏎で設定モードにしてから入力します。
また、
# set system login user root authentication plaintext-password rootのパスワード ⏎
# commit ⏎
# save ⏎
rootのパスワードは、このインスタンス用にSoftLayerでアサインされたrootのパスワードです。
5-2. 認証局の構築
初回の時だけ実行し、運用中は実行しないでください。
① 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. サーバー側の秘密鍵・公開鍵の作成と署名
初回の時だけ実行し、運用中は実行しないでください。
ここではサーバー側の鍵名称を「server」とします。
①サーバー側鍵作成
「./build-key-server server ⏎」
②国名コード
③都道府県名
④都市名
⑤組織名。社名や団体名
⑥「⏎」
⑦「⏎」
⑧メールアドレス
⑨今回チャレンジパスワードの設定は行わない。
「⏎」
⑩「⏎」
⑪「y ⏎」
⑫「y ⏎」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
サーバー証明書---server.crt
サーバー秘密鍵---server.key
5-4. クライアント側の秘密鍵・公開鍵の作成と署名
ここではクライアント側の鍵名称を「client」とします。
必要なクライアント数分、名称を変えて繰り返します。
①クライアント側鍵作成
「./build-key client ⏎」
②国名コード
③都道府県名
④都市名
⑤組織名。社名や団体名
⑥「⏎」
⑦「⏎」
⑧「⏎」
⑨メールアドレス
⑩今回チャレンジパスワードの設定は行わない。
「⏎」
⑪「⏎」
⑫「y ⏎」
⑬「y ⏎」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
クライアント証明書---client.crt
クライアント秘密鍵---client.key
5-5. DHパラメータの作成
鍵の交換に使用するDHパラメータを生成します。
①「./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」です。
(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の設定を行います。
(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/
クライアントPCがWindows10(32bit)ですので「openvpn-install-2.3.11-I601-i686.exe」を使用しました。
7-2.OpenVPNクライアントプログラムのインストール
「openvpn-install-2.3.11-I601-i686.exe」を実行。
「Next」
ここでは導入フォルダーを"ProgramFiles\OpenVPN"にしました。
7-3.CA証明書、クライアント証明書、クライアント秘密鍵のコピー
サーバー側で作成したca.crt、client.crt、client.keyを
”c:\Program Files\OpenVPN\config"フォルダーへコピーします。
7-2.OpenVPNクライアント設定の編集
「インジケータ」のOpenVPNアイコン上で、マウス右ボタンを押し、メニューを表示
remoto "OpenVPNサーバーのパブリックIP"
ca "CA証明書"
cert "クライアント証明書"
key "クライアント秘密鍵"
を編集し、保存。
8.接続確認
8-1.OpenVPNの接続
「インジケータ」のOpenVPNアイコン上で、マウス右ボタンを押し、メニューを表示⇒「接続」
8-2.PINGとSSHで確認
クライアントPCのコマンドプロンプトより、
・VyOSサーバー(10.132.52.229)
・Cent6サーバー(10.132.52.225)
に対してPINGが通る事を確認。
VyOSサーバーとの接続確認完了
Cent6サーバーとの接続確認完了
9. おわりに
実運用の際は、ファイアーウォールの設定を必ず行ってください。
また、VyOS冗長化するにはVRRPを使用しますが、OpenVPN接続が標準ではUDP接続のため、TCPにする必要があります。今後書く予定です。