ヤプリの新卒Androidエンジニアの近藤(ふなち/@_hunachi)です。
AndroidでVPNに接続する一般的な方法とその問題点
皆さんは、AndroidでVPN接続するときはどのようにしていますか?
私は、OSに標準で搭載されているVPN接続機能を使用するのが一般的な方法かなと思います!
この方法ですね↑
ですがAndroid 12以降では、この方法だと使われているプロトコルが IKEv2/IPsec 系の場合しか対応できなくなってしまいました😭
しかもAndroid 12ではAndroid 11以前で設定できていたものを使用して接続できるのですが、Android 13ではその方法での接続もできなくなっています。
でもAndroid 11以前で使用していたプロトコルなど、違うプロトコルを使っているVPNを使いたい時ってありますよね。
この問題の解決方法としては、主に
- アプリを使う方法
- クライアントを自作する
- 既に存在するアプリを使う方法
- VPNのプロトコルを使うことができるPCを中継する方法
があると思います。
WireGuardとかOpenVPNを使う場合は、公式がAndroid用クライアントアプリを出しているためそちらを使うことをオススメします!
ですがそれ以外の場合、VPNクライアントを作るのはある程度コストがかかりますし、いい既存のアプリを私は知りません😢
そこで今回は、IKEv2/IPsec 以外のプロトコルを使用しているVPNに、PCを中継させることでAndroid端末を接続させる方法を2つ紹介します。
Gnirehtet
を使う方法
必要なもの
- 以下の条件を満たすPC
- 使いたいVPNのプロトコルを使うことができ、そのVPNに接続できる
- Gnirehtetがインストールできる
セットアップ手順
1. VPNに繋ぎたい端末とadb接続ができる状態にする
参考になる資料はこちら
Android Debug Bridge(adb) | Android デベロッパー | Android Developers
2. PCを繋ぎたいVPNに接続する
macOSの場合
3. Gnirehtetのダウンロードとセットアップをする。(ここではmacOSを使用する方法のみ記載)
github.com に書いてある通りに進める。
brewを使ってインストールする場合
brew install gnirehtet
gnirehtet run
アプリもAndroid端末に勝手にインストールしてくれる。その場合にVPN接続していいかのダイアログが出るのでOK
を選択する。
Tips:Java版は動かない端末が存在するので、Rust版を使うことをおすすめします。
以下が確認できたらVPN接続成功です。
- Android端末でVPN接続されているのが確認できた。
- ターミナル上でパケットの送受信がされてそうなことが確認できる。
macOSの標準機能を使う方法
必要なもの
- 使いたいVPNのプロトコルを使うことができ、そのVPNに接続できるmacOSのPC
- 上記のPCを有線接続でネットワーク接続できる環境
セットアップ手順
1. PCを繋ぎたいVPNに接続する
2. インターネット共有を行う
- PCを有線接続でネットワーク接続する。
- システム環境設定 > 共有 を開く。
- インターネット共有を選択する。
- 共有する接続経路で繋ぎたいVPNを選択する。チェックはまだ入れない!
- 相手のコンピュータでのポートにWi-Fiを選択する。
Wi-Fiオプション
からパスワードを設定できるので、LANがゲストを許可する場合などは特に安全なパスワードを設定する。
- 繋ぎたいVPNに接続した状態で、インターネット共有にチェック✅を入れる。
- Android端末側で2画面のコンピュータ名のwi-fiネットワークに接続する。
VPNに接続できてないとアクセスできないところにアクセスできたら成功です!
まとめ
今回は、Android12以降でVPNに接続する方法を紹介しました。
このブログに書いてある方法以外の方法も存在すると思います。 その場合は、是非新しいブログやTwitterなどで方法を教えていただけるととても嬉しいです!その際に、このブログをリンクしていただけるともっと嬉しいです!
興味を持たれた方はぜひカジュアル面談にお越しください🙌
最後に、知見提供など協力していただいたチームメンバーの皆さんありがとうございました!