1. はじめに
VyOSの冗長化構成で、OpenVPNリモートアクセス接続を試しました。
仮想サーバーにVyOSを導入した環境での構成です。
下記情報も併せてご覧ください。
・VyOS導入
「SoftLayer仮想サーバにVyOSをインストールしました」
http://qiita.com/Mitsu-Murakita/items/d793250566a8e9f3562b
・OpenVPNリモートアクセス接続
「SoftLayerとVyOSでネットワークの基礎を勉強3-(OpenVPNリモートアクセス編)」
http://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48
・VRRP
「SoftLayer仮想サーバーでVyOSの冗長化構成を勉強1-(VRRP基本構成編)」
http://qiita.com/Mitsu-Murakita/items/15660fd4281959816a0f
2. 構成について
2-1. 全体構成
Softlayerの東京DCでVRRP構成のVyOS(OpenVPNサーバー)仮想インスタンスをデプロイし、オンプレミスのOpenVPNクライアントから接続します。
VRRP構成は、「vyos-TOK01」のPriorityが250、「vyos-TOK02」のPriorityが240ですので、初期状態では「vyos-TOK01」がMASTER、「vyos-TOK02」が BACKUPです。
3. 設定の手順
クライアント側OpenVPNの設定は、 「SoftLayerとVyOSでネットワークの基礎を勉強3-(OpenVPNリモートアクセス編)」
http://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48
をご覧ください。
①まず、 「vyos-TOK01」だけで設定し接続確認します。
②「vyos-TOK01」をpoweroffして停止した後、「vyos-TOK02」だけで設定し接続確認します。
③VRRPの設定を「vyos-TOK01」と「vyos-TOK02」 に行います。①②それぞれで接続確認しているので、接続できるはずですが、接続できません。
④VRRPに関係するOpenVPNの設定をし、接続確認します。
※③で接続できないのは、OpenVPNはUPDで接続しに行きますが、VRRPの関係でTCPで接続するように変更する必要があります。
この変更は、VyOS側とクライアント側の両方に行います。
4. 設定
4-1.① vyos-TOK01 OpenVPN設定、接続確認
4-1-1.VyOS設定
VyOSは導入しているとして、残っている設定は
(1) IP Address(PrivateとPublic)
(2) SSH
(3) Gatewat Address
(4) DNS
(5) Domain Name
(6) Host Name
(7) Static route
です。
※説明しやすいように行番号(xxx)をつけてますが、実際に登録する際は行番号を入力しないでください。
(001) interfaces {
(002) ethernet eth0 {
(003) address 10.132.52.225/26
(004) duplex auto
(005) hw-id 06:0a:86:51:ea:06
(006) smp_affinity auto
(007) speed auto
(008) }
(009) ethernet eth1 {
(010) address 161.202.138.186/29
(011) duplex auto
(012) hw-id 06:88:83:ca:74:82
(013) smp_affinity auto
(014) speed auto
(015) }
(016) loopback lo {
(017) }
(018) }
(019) protocols {
(020) static {
(021) route 10.0.0.0/8 {
(022) next-hop 10.132.52.193 {
(023) }
(024) }
(025) }
(026) }
(027) service {
(028) ssh {
(029) port 22
(030) }
(031) }
(032) system {
(033) config-management {
(034) commit-revisions 20
(035) }
(036) console {
(037) device hvc0 {
(038) speed 9600
(039) }
(040) device ttyS0 {
(041) speed 9600
(042) }
(043) }
(044) domain-name softlayer.com
(045) gateway-address 161.202.138.185
(046) host-name vyos-TOK01
(047) login {
(048) user vyos {
(049) authentication {
(050) encrypted-password xxxxxxxxxxxxxxxxxxxxx
(051) plaintext-password ""
(052) }
(053) level admin
(054) }
(055) }
(056) name-server 10.0.80.11
(057) name-server 10.0.80.12
(058) ntp {
(059) server time.service.networklayer.com {
(060) }
(061) }
(062) package {
(063) repository community {
(064) components main
(065) distribution helium
(066) url http://packages.vyos.net/vyos
(067) }
(068) }
(069) syslog {
(070) global {
(071) facility all {
(072) level notice
(073) }
(074) facility protocols {
(075) level debug
(076) }
(077) }
(078) }
(079) }
・(001)-(018) IPアドレス関連の設定
・(027)-(031) SSHの設定
・(045)-(045) Gatewat Addressの設定
・(056)-(057) DNSの設定
・(044)-(044) Domain Nameの設定
・(046)-(046) Host Nameの設定
・(020)-(025) Static routeの設定
4-1-2.vyos-TOK01 OpenVPN設定
まず、rootアカウントの有効化を行います。
# set system login user root authentication plaintext-password rootのパスワード ⏎
# commit ⏎
# save ⏎
サーバー側、クライアント側秘密鍵・公開鍵の作成します。
「SoftLayerとVyOSでネットワークの基礎を勉強3-(OpenVPNリモートアクセス編)」の「5.サーバー側、クライアント側秘密鍵・公開鍵の作成」をご覧ください。
http://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48
ここでは、サーバー用の鍵関連は /rootに保存しました。
・ca.crt
・dh1024.pem
・server.crt
・server.key
VyOSの設定を行います。
# set interfaces openvpn vtun0 ⏎
# set interfaces openvpn vtun0 mode server ⏎
# set interfaces openvpn vtun0 openvpn-option "--push route 10.0. 0.0 255.0.0.0 --push dhcp-option DNS 10.0.80.11" ⏎
# set interfaces openvpn vtun0 server client client ip 10.132.42. 50 ⏎
# set interfaces openvpn vtun0 server subnet 10.132.42.48/28 ⏎
# set interfaces openvpn vtun0 tls ca-cert-file /root/ca.crt ⏎
# set interfaces openvpn vtun0 tls cert-file /root/server.cr ⏎
# set interfaces openvpn vtun0 tls dh-file /root/dh1024.pem ⏎
# set interfaces openvpn vtun0 tls key-file /root/server.key ⏎
# commit ⏎
# save ⏎
# set nat source rule 1 ⏎
# set nat source rule 1 outbound-interface eth0 ⏎
# set nat source rule 1 source address 10.132.42.48/28 ⏎
# set nat source rule 1 translation address masquerade ⏎
# commit ⏎
# save ⏎
設定は終わりましたので、接続します。
クライアントPCの接続設定の関しては、
「SoftLayerとVyOSでネットワークの基礎を勉強3-(OpenVPNリモートアクセス編)」の「7.クライアントPCの設定」「8.接続確認」をご覧ください。
http://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48
4-2.② vyos-TOK02 OpenVPN設定、接続確認
「 4-1.① vyos-TOK02 OpenVPN設定、接続確認」を参考に設定と接続を行ってください。
サーバー用鍵は「vyos-TOK01」の/rootディレクトリーから「vyos-TOK02」の/rootディレクトリーへコピーしてください。
・ca.crt
・dh1024.pem
・server.crt
・server.key
interfaces {
ethernet eth0 {
address 10.132.52.224/26
duplex auto
hw-id 06:c6:d3:50:ed:82
smp_affinity auto
speed auto
}
ethernet eth1 {
address 161.202.138.188/29
duplex auto
hw-id 06:f1:6b:7d:eb:6c
smp_affinity auto
speed auto
}
loopback lo {
}
}
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
}
}
domain-name softlayer.com
gateway-address 161.202.188.185
host-name vyos-TOK02
login {
user vyos {
authentication {
encrypted-password $1$hNEJiYUZ$YO1n8CsFpLTROKeLIChN7/
plaintext-password ""
}
level admin
}
}
name-server 10.0.80.11
name-server 10.0.80.12
ntp {
server time.service.networklayer.com {
}
}
package {
repository community {
components main
distribution helium
url http://packages.vyos.net/vyos
}
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
time-zone Asia/Tokyo
}
# set system login user root authentication plaintext-password rootのパスワード ⏎
# commit ⏎
# save ⏎
# set interfaces openvpn vtun0 ⏎
# set interfaces openvpn vtun0 mode server ⏎
# set interfaces openvpn vtun0 openvpn-option "--push route 10.0. 0.0 255.0.0.0 --push dhcp-option DNS 10.0.80.11" ⏎
# set interfaces openvpn vtun0 server client client ip 10.132.42. 50 ⏎
# set interfaces openvpn vtun0 server subnet 10.132.42.48/28 ⏎
# set interfaces openvpn vtun0 tls ca-cert-file /root/ca.crt ⏎
# set interfaces openvpn vtun0 tls cert-file /root/server.cr ⏎
# set interfaces openvpn vtun0 tls dh-file /root/dh1024.pem ⏎
# set interfaces openvpn vtun0 tls key-file /root/server.key ⏎
# commit ⏎
# save ⏎
# set nat source rule 1 ⏎
# set nat source rule 1 outbound-interface eth0 ⏎
# set nat source rule 1 source address 10.132.42.48/28 ⏎
# set nat source rule 1 translation address masquerade ⏎
# commit ⏎
# save ⏎
4-3.③ VRRPの設定
# set interfaces ethernet eth0 vrrp ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 advertise-interrval 1 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 preempt true ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 priority 250 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 sync-group synccgroup01 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 virtual-addresss 10.132.52.225 ⏎
# commit ⏎
# save ⏎
# set interfaces ethernet eth1 vrrp ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 advertise-interrval 1 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 priority 250 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 sync-group synccgroup01 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 virtual-addresss 161.202.138.186 ⏎
# commit ⏎
# save ⏎
# set interfaces ethernet eth0 vrrp ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 advertise-interrval 1 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 preempt true ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 priority 240 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 sync-group synccgroup01 ⏎
# set interfaces ethernet eth0 vrrp vrrp-group 100 virtual-addresss 10.132.52.225 ⏎
# commit ⏎
# save ⏎
# set interfaces ethernet eth1 vrrp ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 advertise-interrval 1 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 priority 240 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 sync-group synccgroup01 ⏎
# set interfaces ethernet eth1 vrrp vrrp-group 200 virtual-addresss 161.202.138.186 ⏎
# commit ⏎
# save ⏎
4-4.④ VRRPに関係する、OpenVPNの設定接続確認
「4-1.① vyos-TOK01 OpenVPN設定、接続確認」「4-2.② vyos-TOK02 OpenVPN設定、接続確認」でそれぞれで接続できていましたが、VRRPを設定後に「vyos-TOK02」をMASTERにして接続しようとするとエラーで接続できません。
結論から言いますと、標準ではOpenVPNサーバーはUDPで待ちうけていますが、VRRPではUDPではなくTCPでないと通信できないためです。
サーバー側とクライアント側のOpenVPN設定をTCPに変更すると接続できます。
<サーバー側>
# set interfaces openvpn vtun0 protocol tcp-passive ⏎
# set interfaces openvpn vtun0 protocol tcp-passive ⏎
<クライアント側>
OpenVPNクライアント構成ファイルに「proto tcp」を追加します。
5. 設定したVyOS構成
interfaces {
ethernet eth0 {
address 10.132.52.225/26
duplex auto
hw-id 06:0a:86:51:ea:06
smp_affinity auto
speed auto
vrrp {
vrrp-group 100 {
advertise-interval 1
preempt true
priority 250
sync-group syncgroup01
virtual-address 10.132.52.225
}
}
}
ethernet eth1 {
address 161.202.138.186/29
duplex auto
hw-id 06:88:83:ca:74:82
smp_affinity auto
speed auto
vrrp {
vrrp-group 200 {
advertise-interval 1
preempt true
priority 250
sync-group syncgroup01
virtual-address 161.202.138.186
}
}
}
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"
protocol tcp-passive
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
}
}
domain-name softlayer.com
gateway-address 161.202.138.185
host-name vyos-TOK01
login {
user root {
authentication {
encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
plaintext-password ""
}
}
user vyos {
authentication {
encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
plaintext-password ""
}
level admin
}
}
name-server 10.0.80.11
name-server 10.0.80.12
ntp {
server time.service.networklayer.com {
}
}
package {
repository community {
components main
distribution helium
url http://packages.vyos.net/vyos
}
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
}
interfaces {
ethernet eth0 {
address 10.132.52.224/26
duplex auto
hw-id 06:c6:d3:50:ed:82
smp_affinity auto
speed auto
vrrp {
vrrp-group 100 {
priority 240
sync-group syncgroup01
virtual-address 10.132.52.225
}
}
}
ethernet eth1 {
address 161.202.138.188/29
duplex auto
hw-id 06:f1:6b:7d:eb:6c
smp_affinity auto
speed auto
vrrp {
vrrp-group 200 {
priority 240
sync-group syncgroup01
virtual-address 161.202.138.185
}
}
}
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"
protocol tcp-passive
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
}
}
domain-name softlayer.com
gateway-address 161.202.138.185
host-name vyos-TOK02
login {
user root {
authentication {
encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
plaintext-password ""
}
}
user vyos {
authentication {
encrypted-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
plaintext-password ""
}
level admin
}
}
name-server 10.0.80.11
name-server 10.0.80.12
ntp {
server time.service.networklayer.com {
}
}
package {
repository community {
components main
distribution helium
url http://packages.vyos.net/vyos
}
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
time-zone Asia/Tokyo
}
6. おわりに
OpenVPNをVRRPで冗長化する際は、初期のUDPでなくTCPの設定を行ってください。