ikasama over technology

忘れたくないことを忘れないために

AWS EC2 に OpenVPN を構築して Chromebook から接続するときにハマったポイント

OpenVPN 2.4によるVPN接続環境をAWSで構築する | DevelopersIO

Chromebook から OpenVPN(TLS-Auth、LZO圧縮有り)へ接続してみた - Qiita

基本はこの2つのあわせ技です。 作業内容のほとんどはそれぞれの記事を参考にしてもらえば。

個人的にハマったところ

インターネット向けのトラフィックを全部 OpenVPN 経由にするとき

OpenVPNserver.conf に以下のような設定を書きます。

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 192.168.1.1"

このとき、dhcp-option DNS で指定する DNS サーバのアドレスは、 OpenVPN サーバから到達できるものを指定してください。 何故なら、名前解決も全部 OpenVPN サーバから実行するからです。 最初これがわかってなくて、無限に名前解決に失敗してインターネットに出られなくなった。

AWS EC2 上で構築するなら、AmazonProvidedDNS を指定するのが良いかもしれません。 たとえば VPC のネットワークが 172.30.0.0/16 だったら、AmazonProvidedDNS は 172.30.0.2 になります。 固定で 169.254.169.253 も使えるみたいですけど、試してません。 詳しくはこちら↓。

docs.aws.amazon.com

Chromebook から接続するときはパスワード欄の入力が必須

クライアント証明書をパスワード設定せずに作成した場合でもパスワード欄に何かしらの文字列の入力が必要です。 空欄だと接続しに行ってくれません。

サーバー側の設定と ONC ファイルの設定を合わせる

ONC ファイル作るのが面倒だったんでベースの作成にこれを使いました。

unfix.org

ただ、2018/05/28 時点でそのまま使うのはちょっと微妙で、いくつか手を入れないといけなかったです。

  • "Proto": udp と出力されるので "Proto": "udp" に直す必要がある。
    • udp にダブルクォーテーションがなくて JSON Syntax Error になる
  • クライアント証明書が埋め込まれてしまっているので、デバイスにインポートしたものを使う場合は要修正
  • "Auth": "SHA512" がサーバ側のデフォルト設定と異なる
    • サーバ側に auth SHA512 を設定するか、ONC ファイルから "Auth": "SHA512" を消す

Source IP アドレスを OpenVPN サーバのものにしたい

IP Masquerade しましょう。

$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

以上、楽しい VPN ライフを!

他の参考サイト

OpenVPN on ChromeOS Documentation (publish)

Ubuntu 14.04 で OpenVPN - BLOG EX MACHINA