Sunday, March 1, 2015

VyOSを使ってvpn(l2tp/ipsec)を設定

前記事の続き。VyOSを使って2台のホストマシン(iMac, Surface3)のprivate networkを連結させ、あわよくばその上にvxlanを複数定義するのが最終目的。

まずは前座?としてL2TP over IPSECをやってみる。参考記事

vyos@vyos# configure
vyos@vyos# edit vpn ipsec
vyos@vyos# set ipsec-interface interface eth0
vyos@vyos# set nat-traversal enable
vyos@vyos# set nat-networks allowed-network 0.0.0.0/0
vyos@vyos# commit
VPN Warning: IPSec configured but no site-to-site peers or l2tp remote-users configured

IPSecは設定したけどsite-to-siteのピアを設定していないか、l2tpのリモートユーザを設定していないよって警告が。これだけだと特に意味ないよってことかな。

続きましてl2tpの設定。

一度馬鹿な設定をしてl2tpの設定をクリアするはめにorz delete vpn l2tpという形でshow configurationで表示される階層に従って消したい要素を指定すれば消してくれるみたい。

vyos@vyos:~$ configure
vyos@vyos# edit vpn l2tp remote-access
vyos@vyos# set ipsec-settings authentication mode pre-shared-secret
vyos@vyos# set ipsec-settings authentication pre-shared-secret makimaki
vyos@vyos# set authentication mode local
vyos@vyos# set authentication local-users username yukaary password craft
vyos@vyos# set outside-address 192.168.100.103   
vyos@vyos# set client-ip-pool start 172.16.1.100
vyos@vyos# set client-ip-pool stop 172.16.1.110
vyos@vyos# commit
vyos@vyos# save

これで設定できたはず。L2スイッチで繋がっていないSurface3から、前回iMacを中心に構成したprivate-net上のraspberry pi(172.17.6.201)に繋がれば、VPNに接続できたと思っていいかな。

この時点でホストマシンのOSXからはVPN接続設定を作れば、接続することができた。ネットワークデバイスを表示するとこんな感じになる。

yukaarybox:~ yukaary$ ifconfig
...
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
    ether 0a:30:62:53:0e:c5 
    media: autoselect
    status: active
...
ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
    inet 172.16.1.101 --> 10.255.255.0 netmask 0xffffff00 

Surfacre 3 (windows 8.1)のほうは、なんでか繋がらない。VyOSのログを見ると、繋ごうと努力はしているみたいだが…。

ログ:

Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: responding to Main Mode from unknown peer 192.168.100.101
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: Oakley Transform [AES_CBC (256), HMAC_SHA1, ECP_384] refused due to strict flag
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: Oakley Transform [AES_CBC (128), HMAC_SHA1, ECP_256] refused due to strict flag
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: Oakley Transform [AES_CBC (256), HMAC_SHA1, MODP_2048] refused due to strict flag
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: Oakley Transform [3DES_CBC (192), HMAC_SHA1, MODP_2048] refused due to strict flag
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: NAT-Traversal: Result using RFC 3947: no NAT detected
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: Peer ID is ID_IPV4_ADDR: '192.168.100.101'
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: sent MR3, ISAKMP SA established
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #24: responding to Quick Mode
Mar  1 11:07:20 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #24: IPsec SA established {ESP=>0x232363ae <0xc03d70aa}
Mar  1 11:07:22 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: received Delete SA(0x232363ae) payload: deleting IPSEC State #24
Mar  1 11:07:22 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101 #23: received Delete SA payload: deleting ISAKMP State #23
Mar  1 11:07:22 vyos pluto[4240]: "remote-access-mac-zzz"[11] 192.168.100.101: deleting connection "remote-access-mac-zzz" instance with peer 192.168.100.101 {isakmp=#0/ipsec=#0}

192.168.100.101がSurface 3のIP。refused due to ...ってメッセージと、その時に記載されている暗号化方式っぽいのが気になる木…。

色々原因を探っていたら、それIPSECの設定が足りてないよって記事を見つけた。これ

You should provide the standard that you would like to the encryption proposals (aes128, aes256 or 3des), and the hashing function preferred (md5, sha1, sha256, sha384 and the newest sha512).
You should use what you would like as the encryption standard, now VyOS

「利用可能な暗号化方式を提供しないといけないよ!あとお好みのハッシュ関数もね!」みたいな感じ? IPSECを使った通信をするときに、利用可能な暗号化方式をVyOSが接続側に教えてあげないといけないとか、そういう事だろうか。この辺は、まだ知識無いからあとでゆっくり調べるとして、まずは書いてある通りにIPSECの設定を追加してみるよ。

vyos@vyos:~$ configure
vyos@vyos# set vpn ipsec esp-group ESP-1W compression disable         
vyos@vyos# set vpn ipsec esp-group ESP-1W lifetime 3600      
vyos@vyos# set vpn ipsec esp-group ESP-1W mode tunnel  
vyos@vyos# set vpn ipsec esp-group ESP-1W pfs enable 
vyos@vyos# set vpn ipsec esp-group ESP-1W proposal 1 encryption aes256
vyos@vyos# set vpn ipsec esp-group ESP-1W proposal 1 hash sha1
vyos@vyos# set vpn ipsec esp-group ESP-1W proposal 2 encryption aes256
vyos@vyos# set vpn ipsec esp-group ESP-1W proposal 2 hash sha1
vyos@vyos# set vpn ipsec ike-group IKE-1W proposal 1 encryption aes256
vyos@vyos# set vpn ipsec ike-group IKE-1W proposal 1 hash sha1
vyos@vyos# set vpn ipsec ike-group IKE-1W proposal 2 encryption aes256
vyos@vyos# set vpn ipsec ike-group IKE-1W proposal 2 hash sha1
vyos@vyos# set vpn ipsec ike-group IKE-1W key-exchange ikev1
vyos@vyos# set vpn ipsec ike-group IKE-1W lifetime 28800    
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit

続いてWindows 8.1側。(なんでこんな面倒くさいんだ!)

コントロールパネル:ネットワークと共有センター:新しい接続またはネットワークのセットアップを開いて、「職場に接続します」を選択、次の画面で「インターネット接続(VPN)を利用します」を選ぶ。VPNへの接続先gatewayにIP(今回の場合、192.168.100.103)を打ち込むと、なんかデフォルト設定で接続しようと試みる…が上手くいかない。

このあと、「ネットワーク接続」を開くと「VPN接続」というアイテムが追加されているので、そいつのプロパティを開く。

「セキュリティ」タブの以下の項目を変更する。

  • VPNの種類:IPSecを利用したレイヤー2トンネリングプロトコル(L2TP/IPSec)
  • 上の詳細設定を開いて「認証に事前共有キーを使う」に変更
    • パスワードは今回の場合は「makimaki」
  • データの暗号化:暗号化が必要(サーバーが拒否する場合は切断します)
  • 認証:「次のプロトコルを許可する」に変更
    • その下の項目をとりあえず全チェック

ここまでやった後に、ネットワーク(画面右端に出現する現在の接続情報と接続先候補のメニュー)を開いて、「接続:VPN接続」を選択、最初はアカウントとパスワードを聞かれる。VyOS上に登録したやつを入力して接続をリクエストすると…繋がった!

2回目以降はアカウントとパスワードを記憶してくれている模様

ipconfigすると「PPPアダプター VPN接続」って名前でIPをもらえていた。やったぜ。

最終確認

VPN接続状態で、iMACと物理L2スイッチ(ハブ)で繋がっているRaspberryPi(private-net)に接続できるか確認。

$ ssh pi@172.16.1.201
<このあと、普通に接続できましたー!>

1 comment:

  1. OpenVPNのほうも試してみたいので参考記事のリンク貼り貼り。

    * https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04
    * http://gihyo.jp/admin/serial/01/ubuntu-recipe/0329?page=3

    digital oceanの記事が英語だけど懇切丁寧だから、まずはそちら側でやってみようかな。

    ReplyDelete