見出し画像

VyOSをNGN網に接続してIXルーターとVPN繋いでみたお話(その参)

前回、前々回の続き。
 ※VyOSをNGN網に接続してIXルーターとVPN繋いでみたお話(その壱)
 ※VyOSをNGN網に接続してIXルーターとVPN繋いでみたお話(その弍)

多分今回で終われますし、VyOS のお話をご覧になりたい方は
この記事だけしか見て頂かなくても良いです(え?)


いよいよ待ちに待ったVyOS側。

以前にもちょろっと触れましたが VyOS は 1.4 系になってから、
そのコマンド体系が大いに異なるものへと変貌と遂げています。
昔話で恐縮ですが、1.2 系から 1.3 系の時には
それほど大きな変化はなかったのですが、
1.3 系から 1.4 系は結構違います。
地上にあって乗換え等がこの上なく便利だった東横線渋谷駅が
地下深くに潜ってしまい
「これだけ歩くなら代官山から歩いたほうが良くね?
特に井の頭線と乗り継ぎする時っ!」

ってくらいに変わっています。
東横線の例では単純に不便になっただけで、
VyOS の場合はシンプルに慣れの問題もあるので
そこまでマトを得た例えではない自覚はありますが、
気持ち的にはアレくらい違います。

まずは ESP と IKE の設定を。

この辺りにバージョンによる差分はなさげです
 (※パラメーターはいつもの様にあくまで例です)

set vpn ipsec esp-group ESP lifetime '9600'
set vpn ipsec esp-group ESP pfs 'disable'
set vpn ipsec esp-group ESP proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE dead-peer-detection interval '10'
set vpn ipsec ike-group IKE dead-peer-detection timeout '30'
set vpn ipsec ike-group IKE ikev2-reauth
set vpn ipsec ike-group IKE key-exchange 'ikev2'
set vpn ipsec ike-group IKE lifetime '28800'
set vpn ipsec ike-group IKE proposal 1 dh-group '2'
set vpn ipsec ike-group IKE proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE proposal 1 hash 'sha256'

そこはかとなく IKEv1 の影響を色濃く感じるので
IKEv2 宗派の皆様からすると違和感は感じるかも知れませんが、
こう言うものとして割切りましょう。
かく言う筆者は IKEv1 で育った人間なのでぶっちゃけラク。

次に IPsec インターフェースを設定

set vpn ipsec interface 'eth0'

1.3 系以前では同じ設定を投入するコマンドが
 [ set vpn ipsec ipsec-interfaces interface eth0 ]
と「色々同じようなのを何回言わすねん」系のコマンドだったので
この変更は素直に歓迎します。

次に peer 設定を入れていくのですがこれまた 1.3 系までと 1.4 系で
大きく異なるのでここから先は更なる注意が必要になります。

ついにやって来た IPsec ピア設定。


やっとこさここまでたどり着いた感満載なので
早速サンプルコンフィグを。

set vpn ipsec site-to-site peer CON-NAME authentication local-id 'mrwhitebelt.i.open.ad.jp'
set vpn ipsec site-to-site peer CON-NAME authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer CON-NAME authentication remote-id 'shiroobikun.hoge.v6.nmddns.jp'
set vpn ipsec site-to-site peer CON-NAME connection-type 'initiate'
set vpn ipsec site-to-site peer CON-NAME default-esp-group 'ESP'
set vpn ipsec site-to-site peer CON-NAME ike-group 'IKE'
set vpn ipsec site-to-site peer CON-NAME local-address 'any'
set vpn ipsec site-to-site peer CON-NAME remote-address 'shiroobikun.hoge.v6.nmddns.jp'
set vpn ipsec site-to-site peer CON-NAME vti bind 'vti0'

1.3系までは[ site-to-site peer ] の後にIPアドレスを指定するケースが
多かったように記憶していますが
1.4系では残念ながら IP アドレスを指定できません。
正確には[ Connection name of the peer ]に IP アドレスを指定しても
装置としては飽くまで接続名としてしか認識しないっぽいです。
なので 1.3 系までで止まっているユーザーには馴染みのない
[ remote-address ~ ]なんて設定が必要になります。

一長一短と言ってしまえばそれまでですが
個人的には(特に複数 VPN 接続しようとすると)接続名考えるのが面倒だし、直感的にわかりやすいので 1.3 系までの時みたいな実装の方が好み。

大きな違いとしてはここに尽きるのですが、
一つ疑問が湧くのではないでしょうか。

PSK はどこで設定してんねん!?

1.3 系以前では
set vpn ipsec site-to-site peer x.x.x.x authentication pre-shared-secret 'oursecret' ]

の様に設定されていたかと思うが、
1.4 系では上の様に設定することはもうできません。
賢明な皆様ならお気付きどころか自分で調べ上げ、
解決まで至ったかとは思いますがどうかコスらせて下さい。

結論から言うと…

set vpn ipsec authentication psk PSK-NAME id 'shiroobikun.hoge.v6.nmddns.jp'
set vpn ipsec authentication psk PSK-NAME id 'mrwhitebelt.i.open.ad.jp'
set vpn ipsec authentication psk PSK-NAME secret 'oursecret'

と別枠で設定するようになっています。
最初、1.3 系の様に
[ set vpn ipsec site-to-site peer CON-NAME authentication ]
の後に、Tab 打とうが[ ? ]打とうが全く見つからなくて
ハマったのはここだけの話。
ぶっちゃけオフィシャルにはあったんですけどね。

めでたく設定も終え、compare commit 、save、exit
のお馴染みワンセットを打ち終えたら 
[ show vpn ike sa ]と[ show vpn ipsec sa ]を打って、
VPN が確立しているかを見てみます。
IKEv2 は IKEv1 と違ってフェーズがふたつあるわけでもないのに
両方のコマンドが打てるのはよくよく考えてみれば変な感じです。

動作確認

vyos@vyos:~$ sho vp ik sa
Peer ID / IP                            Local ID / IP
------------                            -------------
2408:21z:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz shiroobikun.hoge.v6.nmddns.jp 2408:21x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx mrwhitebelt.i.open.ad.jp

    State  IKEVer  Encrypt      Hash               D-H Group      NAT-T  A-Time  L-Time
    -----  ------  -------      ----               ---------      -----  ------  ------
    up     IKEv2   AES_CBC_256  HMAC_SHA2_256_128  MODP_1024      no     82      0

Peer ID / IP                            Local ID / IP
------------                            -------------
2408:21z:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz shiroobikun.hoge.v6.nmddns.jp 2408:21x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx mrwhitebelt.i.open.ad.jp

    State  IKEVer  Encrypt      Hash               D-H Group      NAT-T  A-Time  L-Time
    -----  ------  -------      ----               ---------      -----  ------  ------
    up     IKEv2   AES_CBC_256  HMAC_SHA2_256_128  MODP_1024      no     94      0

vyos@vyos:~$
vyos@vyos:~$ sho vp ip sa
Connection    State    Uptime    Bytes In/Out    Packets In/Out    Remote address                          Remote ID                       Proposal
------------  -------  --------  --------------  ----------------  --------------------------------------  ------------------------------  ------------------------
CON-NAME-vti  up       57s       0B/0B             0/0               2408:21x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx  shiroobikun.hoge.v6.nmddns.jp   AES_CBC_256/HMAC_SHA2_256_128
CON-NAME-vti  up       59s       0B/0B             0/0               2408:21x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx  shiroobikun.hoge.v6.nmddns.jp   AES_CBC_256/HMAC_SHA2_256_128
vyos@vyos:~$

おー。大丈夫そう。めでたし、めでたし…

と、止めても良いのですがここで念のためping疎通も実施しましょう。
ping飛ばしてみると、あら不思議、通ってくれない。
そんな時は慌てず騒がずログを見たり、
色々showコマンドを叩いておかしいところを探りましょう。

ping 疎通 NG の原因

今回のケースでは[ show interfaces ]を見たら

vyos@vyos:~$ show int
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface    IP Address                MAC                VRF        MTU  S/L    Description
-----------  ------------------------  -----------------  -------  -----  -----  ----------------
eth0                                   XX:XX:XX:XX:XX:XX  default   1500  u/u
             2408:21x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64
lo           127.0.0.1/8               00:00:00:00:00:00  default  65536  u/u
             ::1/128
vti0         xxx.xxx.xxx.xxx/xx        n/a                default   1422  A/D
vyos@vyos:~$

と何故か vti インターフェースがアップしてくれていなかったので
[ sudo ip link set vti0 up ]したら ping が飛ぶようになりました。
筆者が OS ビルドした際に上手く行ってくれなかったのか、
VyOS そのものの作りがアレなのかは定かではございませんが、
VPN 接続が上手く行っても vti をup してくれないのかも知れません。
そんな時は
「VPN=正常、且つvti=A/Dの時にリンクアップコマンドを叩く」
的なスクリプトを組んで、cron 的に実行させるとかそういう対応が
ちょっと面倒ですが必要になります。

余談ですが昔々、1.1.6 とか 1.1.7 辺りに同じ様な BUG があったのですが、
それ以降、fix されているはずだったんですけどね…
あくまでご自身がビルドされた VyOS を使う(ハズ)ですので
そこは自己責任で。筆者に何か言われても「…」としか言えないですし。

ソースコードレベルで対応するのも出来るのであれば
それに越したことはないのでしょうが、
そのレベルの解析は筆者ごときの似非エンヂニアでは到底わからないので、
どうしてもそれレベルの対応が必要そうな場合は素直に
ま○ろ○工房さん辺りに問い合わせた方が無難ですね。
(※リンクは自主規制しておきます)
あそこには人間やめてるレベルのマジモンしかいないという噂なので、
そういう知見をお金で得ると言うのも悪くない選択肢に思います。
B-to-B しかやってくれない気もするけど。

まとめ

とにもかくにも、Config 体系がかなり変わっているので
古からの VyOS ユーザーの皆様からすると「お馴染みの」、
が通用しないレベルになっているので気を付けましょう。
なんなら 1.3 系以前のコンフィグが知りたいと要望があれば
対応していくつもりです。

このシリーズ、長くなってしまいましたが以上とさせて頂きます。

最後まで読んでくれてありがとうございます。
よかったら「スキ❤️」も押してくれると嬉しいです。

この記事が気に入ったらサポートをしてみませんか?