情報は各所に転がっていて事例も十分にありそう。vyattaは有償になったのですよね、だから、VyOSを使えばタダで使えるのですよね、というのは、下調べの段階。リモートアクセスVPNの機能をVPCに持たせる為にPPTPでVPNできる環境を作ろうかと思ったら、しょうもないバグに当たったので。
VyOSにPPTPできない
使ったAMIはMarketplaceにあるv1.1.0。手順は非常にわかりやすかったのが、サーバワークスさんのブログ。ここまで手順があるなら、簡単じゃないか、と後輩に検証を頼んだのですが、わかりません、できません、の一点張り。真面目にやれよ!と怒りつつ、自分でもやってみた。基本的には最低限の設定のみ。
configure set vpn pptp remote-access authentication mode local set vpn pptp remote-access authentication local-users username vpnuser password password set vpn pptp remote-access client-ip-pool start 172.16.0.1 set vpn pptp remote-access client-ip-pool stop 172.16.0.100 commit save
これだけやればひとまず接続だけはできそうなのに。確かにできない。ログを見ても何だかわからず、Wiresharkもtcpdumpも駆使したのだけど、原因特定に至らない。ネットワークのトラブルはこれだから嫌だ(だけど何故だかいつも巻き込まれる)。
VyattaならPPTPできる
切り分けの為にはお金も惜しまず検証してみようかと。有償版のVyattaを使って同じように設定してみる。同じ手順で何ともあっさりできた。バージョン差異なんかもあるだろうけど、裏で普通にpptpdが動いているだけのようなので、設定ファイルを比べてやろう。
options.pptpdが変
/etc/ppp/配下のファイルを比べてみたら、VyOSのoptions.pptpdが何だか変。
$ cat /etc/ppp/options.pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 ### Vyatta PPTP VPN End ###
本来設定をすると書き込まれるはずの「~Begin ###」が書いていないし、中途半端な記載になっていることに気付く。この時点でほぼ半日を要した。
手動でoptions.pptpdを修正してみる
試しにバックアップして、Vyattaの設定に合わせてoptions.pptpdを書き換えて、pptpdサービスを再起動したら、上手く行った!なんだこれ。完全にバグじゃねえか。
バグ情報発見
ここに全部書いてありました。v1.1.1ではFixされているらしいけど、こんなの残ってるAMIを配布されても、ちょっと困るな。オープンソースってそんなものなのか?
まとめ(問題と回避策)
VyOSのpptpの設定をする場合、required authentication protocolの指定をしないと、設定ファイルが不完全な状態で生成されてしまう為、pptpdが正常に動作しない。required authentication protocolを明示的に指定すれば、設定ファイルに本来の形式で書き込まれる。ということで、下記を設定して解決。
set vpn pptp remote-access authentication require mschap-v2
解決はしたけど全然納得行かないです。他のバグ情報も全部読まないとダメなのですかね。