Android端末をVPNサーバーとして利用する 総まとめ 完全版
- 2019.11.14
- Android
- Android, Android端末をVPNサーバーとして利用する, Linux, OpenVPN, Servers Ultimate, VPN, Windows, WSL, サーバー, スマートフォン, ソフトウェア, ネットワーク, まとめ
総まとめをしたはずなのですが、この後に大規模な変更をしたので改めてまとめなおします。
なお追加される内容は証明書の自前発行関係です。
ここから更に変更されなければ良いのですが・・・
- 1. Android端末をVPNサーバーとして使うためにServers Ultimateというアプリを使う
- 2. DDNSの設定(固定IPではない場合)
- 3. Servers Ultimateの設定
- 4. ポート開放
- 5. .ovpnファイルの編集
- 6. 証明書の発行(iOSデバイスで接続したい場合やできそうな人向け)
- 6.1. Windows Subsystem for Linuxの利用(iOSデバイスで接続したい場合やできそうな人向け)
- 6.2. Windows Subsystem for Linuxの有効化(iOSデバイスで接続したい場合やできそうな人向け)
- 6.3. Microsoft StoreからUbuntuのインストール(iOSデバイスで接続したい場合やできそうな人向け)
- 6.4. Ubuntuの起動(iOSデバイスで接続したい場合やできそうな人向け)
- 6.5. インストール可能なパッケージの一覧更新(iOSデバイスで接続したい場合やできそうな人向け)
- 6.6. easy-rsaのインストール(iOSデバイスで接続したい場合やできそうな人向け)
- 6.7. ディレクトリの移動(iOSデバイスで接続したい場合やできそうな人向け)
- 6.8. varsの編集(iOSデバイスで接続したい場合やできそうな人向け)
- 6.9. 認証局の作成(iOSデバイスで接続したい場合やできそうな人向け)
- 6.10. サーバー証明書の作成(iOSデバイスで接続したい場合やできそうな人向け)
- 6.11. DH鍵の生成(iOSデバイスで接続したい場合やできそうな人向け)
- 6.12. クライアント証明書の作成(iOSデバイスで接続したい場合やできそうな人向け)
- 6.13. 生成した証明書の取り出し(iOSデバイスで接続したい場合やできそうな人向け)
- 6.14. Servers UltimateのOpenVPNで利用されるファイルのディレクトリ(iOSデバイスで接続したい場合やできそうな人向け)
- 6.15. 証明書をAndroidサーバーへ移動(iOSデバイスで接続したい場合やできそうな人向け)
- 6.16. DH鍵のリネーム(iOSデバイスで接続したい場合やできそうな人向け)
- 6.17. 証明書をクライアント設定ファイルフォルダーへ移動(iOSデバイスで接続したい場合やできそうな人向け)
- 7. VPNサーバーの起動
- 8. OpenVPN接続用ツールの利用
Android端末をVPNサーバーとして使うためにServers Ultimateというアプリを使う
Servers UltimateはAndroid端末を様々なサーバーとして使えるようにしてくれるアプリです。
とりあえずProじゃない版お試し版を利用してからPro版を購入しましょう。
本当に様々なサーバー、ツール機能があります。
今の所私が利用しているのは、SMBサーバー、Wake On LANクライアント、VPNサーバー、Dynamic DNS アップデーターといったところです。
もちろんこれ以外にも様々なサーバーが利用できます。使っていないAndroid端末の活用先として最高。だだしroot化が必須です。
DDNSの設定(固定IPではない場合)
Servers UltimateでAndroid端末をDynamic DNS アップデーターとして利用して無料DDNSサービスを利用する
ということで使えるように設定していきます。
まず事前にこれを見てDDNSの設定をしておいてください。
固定IPを契約している人は必要ありませんが、一般的には必要だと思います。
よくわからない人は設定してください。
Servers Ultimateの設定
Servers Ultimate本体とVPNサーバーに必要なPackをインストールしておいてください。
Servers Ultimateを起動したらServersからADDを押してVPN Serverを選択してください。
開くと英語でなにか書かれているので自前の英語力かGoogle翻訳パワーを活用して読んでください。
GENERAL
SERVER NAME
好みでつけてください。
Start on Bootにチェックを入れてください。
SPECIFIC
PROTOCOL TYPE(VPN接続などが規制されている回線で接続する場合のみ変更)
一般的には高速と言われているUDPのままにしますが、VPN接続が拒否されるような場所でも利用できるようにする場合にはTCPを選択します。
Address 1
ここには初期からGoogle Public DNSである8.8.8.8が登録されていると思います。
VPN経由で接続する場合、ここで指定したDNSが利用されるので、好みのDNSを指定してください。
Google AdSenseやアフィリエイトなどブロックされて困る私としては勧めたくありませんが、例えばAdGuard DNS(176.103.130.130)を指定すると広告ブロックできちゃったりします。
DNSブロッキングってやつです。DNSブロッキングの正しい(間違った)使い方です。
ただし、AdGuard DNSは名前解決がGoogle Public DNSなどより若干遅い気がします。
Address 2
Google Public DNSの代替DNSである8.8.8.4が登録されていると思います。
AdGuard DNSの代替DNSは176.103.130.131です。
OTHER
Enable compression(comp-lzo)
私の環境では何故かこれを有効にするとインターネット接続が非常に不安定になってしまったので無効にします。
Enable client to client communication(client-to-client)
必要そうだったので有効に。違いはわかりません。
CLIENT SERVER IP
これはDDNSで設定したドメインを指定してください。
固定IPの方はそのIPアドレスを指定してください。
USERS(自分で証明書を用意する場合は不要)
後々使うので追加します。
自分で証明書を用意する場合は証明書で認証するので必要ありません。
CLIENT DATAを保存
SPECIFICのCLIENT DATAからSaveしてください。
保存すると英語が表示されるので読んでください。内容はサーバーの設定を変えたらまたSaveし直してねって感じです。多分。
ポート開放
AndroidサーバーをIP固定
これを見てAndroidサーバー側のローカルIPを固定してください。
ルーター側の設定
ルーターの設定画面でポート開放なりポートマッピングなり静的IPマスカレード設定なり書かれているところから設定します。
私のONU(PR-S300SE)の場合、詳細設定→静的IPマスカレード設定から空いているエントリー番号をクリックし、このように設定します。
優先順位は1、宛先IPアドレスは先程固定したAndroidサーバーのIPアドレス、変換対象プロトコルはTCPとUDP両方(一応)、宛先ポートと変換対象ポートは変更していなければ1194と入力してください。
あとは設定で保存します。
なお、上でVPN接続が拒否される場所でも接続できるようにTCPを選択した場合は変換対象ポートのみ443に設定してください。
.ovpnファイルの編集
CLIENT DATAを保存で保存されたzipファイルを展開すると”client.ovpn”のような.ovpnファイルが存在していると思います。
それを適当なテキストエディターで開き、編集します。
VPN接続が拒否される場所でも接続できるようにプロトコルをTCP、変換対象ポートを443にした人はremote hogehoge 1149のように自宅のドメインとポートが書かれている部分のポート番号を443に変更してください。
証明書の発行(iOSデバイスで接続したい場合やできそうな人向け)
一応今までの設定のみで接続自体はできる様になるのですが、Servers Ultimateが発行する証明書は古い時代のものでセキュリティに難があります。
そのため、OpenVPNの公式クライアントで接続しようとするとエラーが出て接続することが出来ません。
Windows版とAndroid版は無理やり接続させる方法があるのですが、iOSデバイスでは出来ません。
そのため、証明書を自分で発行して解決するわけですが、証明書の発行はLinux系の操作をする必要がありますし、そこそこ面倒なのです。
なので、WindowsかAndroidでしか使わないし低セキュリティでもとりあえず接続さえできればOKという人は飛ばしもらっても構いません。
ただし、iOS版で利用したい場合は必須です。頑張ってください。
Windows Subsystem for Linuxの利用(iOSデバイスで接続したい場合やできそうな人向け)
Windows10ではWindows中でLinuxを利用することができるすごい機能があります。
すでに仮想環境やらなんやらでLinuxの環境がある方は良いのですが、私は無いので(とはいっても簡単に作れますが)Windows Subsystem for Linuxを利用します。
Windows Subsystem for Linuxの有効化(iOSデバイスで接続したい場合やできそうな人向け)
コントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化からWindows Subsystem for Linuxを探して有効にしてください。自動でファイルのダウンロードやらインストールやらをやってくれます。
完了したら再起動してください。再起動しないと利用できません。
Microsoft StoreからUbuntuのインストール(iOSデバイスで接続したい場合やできそうな人向け)
Microsoft Storeなんて今までの人生で一回も利用したことがありませんでしたが、WSLを利用する場合はMicrosoft StoreからUbuntuをインストールしなくてはなりません。
検索からWSLと検索し、Ubuntuをインストールします。
他のディストリビューションでも良いような気がしますが、ここは素直にUbuntuにしておきます。
Ubuntuの起動(iOSデバイスで接続したい場合やできそうな人向け)
起動すると初回インストールがあるので待ちましょう。
インストールが完了するとUbuntuで利用するユーザー名とパスワードの作成を求められます。
何でも良いので忘れない適当なものを作りましょう。ただしユーザー名の頭に大文字を使えないなど制約はあります。
また、パスワード入力時は”*”もなにも出てきません。
インストール可能なパッケージの一覧更新(iOSデバイスで接続したい場合やできそうな人向け)
コマンドプロンプトやらなんやらを起動して”ubuntu”と入力することでWSLを利用することが出来ます。
sudo su
パスワードを入力して管理者権限にして、
apt-get update
これを実行してください。
インストール可能なパッケージの一覧が更新されます。
easy-rsaのインストール(iOSデバイスで接続したい場合やできそうな人向け)
apt-get install easy-rsa
OKならばYを入力してインストールしましょう。
ディレクトリの移動(iOSデバイスで接続したい場合やできそうな人向け)
cd /usr/share/easy-rsa
とコマンド入力し、easy-rsaのあるディレクトリに移動します。
varsの編集(iOSデバイスで接続したい場合やできそうな人向け)
編集しないとエラーが出るので編集しておきます。
vim vars
で開き、
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
をコメントアウト、
export KEY_CONFIG=/usr/share/easy-rsa/openssl-1.0.0.cnf
を追加します。
認証局の作成(iOSデバイスで接続したい場合やできそうな人向け)
. ./vars
環境変数の設定、
./clean-all
なんか、
./build-ca
で認証局を作ります。秘密鍵とか公開鍵とか色々作成されます。
色々なことを聞かれますが、適当でも大丈夫です。
サーバー証明書の作成(iOSデバイスで接続したい場合やできそうな人向け)
./build-key-server server
秘密鍵と公開鍵が作られます。同じく適当でも大丈夫です。
challenge passwordは何も入力しないでください。
Sign the certificate? と聞かれるのでyで署名します。
またなんか聞かれるのでyでOKです。多分。
DH鍵の生成(iOSデバイスで接続したい場合やできそうな人向け)
鍵交換のなんかすごいやつらしいです。
./build-dh
これで作成します。
クライアント証明書の作成(iOSデバイスで接続したい場合やできそうな人向け)
./build-key client
で作ります。同じく適当でも大丈夫です。
challenge passwordは何も入力しないでください。
Sign the certificate? と聞かれるのでyで署名します。
またなんか聞かれるのでyでOKです。多分。
生成した証明書の取り出し(iOSデバイスで接続したい場合やできそうな人向け)
Explorerから”\\wsl$”にアクセスすると簡単にファイルにアクセスすることが出来ます。
\\wsl$\Ubuntu\usr\share\easy-rsa\keys
に色々作ったものがあります。
ca.crt、client.crt、client.key、dh2048.pem、server.crt、server.keyをどこかわかりやすいところに移動しておきましょう。
Servers UltimateのOpenVPNで利用されるファイルのディレクトリ(iOSデバイスで接続したい場合やできそうな人向け)
Android端末の/data/data/com.icecoldapps.serversultimate.packa/vpnが利用されるファイルの保存先です。
keysに証明書の類があるのがわかりますね?
なにもない人は一旦作成途中のVPNサーバーを起動して止めてください。
証明書をAndroidサーバーへ移動(iOSデバイスで接続したい場合やできそうな人向け)
今必死に作った証明書を利用するAndroid端末に移動させます。
何かしらの方法でAndroidに証明書を持ってきて/data/data/com.icecoldapps.serversultimate.packa/vpn/keysにca.crt、dh2048.pem、server.crt、server.keyを移動させます。
なお、自動生成された証明書は必要なくなりますが、うまくいかなかったときに面倒なので削除せずにリネームして残しておくことをおすすめします。
DH鍵のリネーム(iOSデバイスで接続したい場合やできそうな人向け)
dh2048.pemになっていると思いますが、Servers Ultimateが生成しているDH鍵のファイル名はdh1024.pemになっているのでリネームしてください。
証明書をクライアント設定ファイルフォルダーへ移動(iOSデバイスで接続したい場合やできそうな人向け)
接続するために必要なクライアント接続ファイルをServers Ultimateから受け取っていると思います。
中にあるca.crtとclient.crtとclient.keyを自分で生成したものに置き換えます。
VPNサーバーの起動
サーバー側の設定は終了したのでVPNサーバーを起動してください。
とりあえず自動でシャットダウンされずに動作し続ければひとまず安心です。
OpenVPN接続用ツールの利用
Windows版クライアント
ダウンロード
ここからWindows版のクライアントをダウンロードしてください。
あとは起動してインジケーターにあるOpenVPNのアイコンを右クリックし、上で保存し編集した.opvnファイルをインポートするだけです。
接続ファイルのインポートをしてもエラーが発生した場合
.opvnファイルをインポートしたと思いますが、それだけだと.opvnファイルのみインポートされ他のファイルがインポートされていません。
他の.crtやら.keyやらが必要なので、
Users\%UserName%\OpenVPN\config\client
というフォルダーが存在しているはずなのでそこに残りのファイルも全てコピーします。これで動作するはずです。
なお、Androidサーバーと同じLAN内では接続できないのでモバイル回線なり外の回線を利用してください。
それでも動作しない場合(証明書を自前発行してない上にMD5とかSHA256とかセキュリティ系っぽいエラーの場合)
--tls-cipher DEFAULT:@SECLEVEL=0
と記述してください。これで一応接続できるようになります。
Android版クライアント
証明書を自前発行した場合
公式のOpenVPNクライアントを利用することが出来ます。もちろん後述するクライアントでもOKです。
インストール
このアプリを利用します。
後述するオープンソースクライアントのほうが高機能な気がしますが、こちらはシンプルでわかりやすいと思います。
使い方
最初に開くと三択が表示されるのでOVPN Profileを選択します。
先程作ったクライアント設定ファイル一式を端末内に移動させ、それを指定してIMPORTしてください。
好きな名称を付ければOKです。
あとは開いてうまく接続されることを願うだけです。
なお、Androidサーバーと同じLAN内では接続できないのでモバイル回線なり外の回線を利用してください。
証明書を自前発行していないかオープンソースOpenVPNクライアントを利用する場合
オープンソースOpenVPNクライアントの場合は(今の所)低セキュリティな証明書でも接続することが可能です。
インストール
このアプリを利用します。
公式ではありませんが、オープンソースのクライアントですし、公式と同じくらい利用されているので問題はないでしょう。
むしろ公式のものよりも高機能で色々できそうです。
使い方
.opvnファイルを利用する場合は右上の箱に↓が書かれたようなマークをタップし.opvnファイルを選択します。
プロファイル名を適当につけます。
.opvnファイルを指定しているのだから証明書の類も設定してくれれば良いのですが、してくれないので自分で指定します。
CA証明書にca.crtを、クライアント証明書にclient.crtを、クライアント証明書のキーにclient.keyを選択し右上のチェックをタップします。
あとは完成したプロファイルをタップすれば低セキュリティでも接続できるはずです。
なお、Androidサーバーと同じLAN内では接続できないのでモバイル回線なり外の回線を利用してください。
iOS版クライアント
iOS版では公式クライアントしか存在していませんし、Windows版のように低セキュリティ証明書制限を回避するコマンドもないので自前での証明書発行が必須になります。
インストール
このアプリです。
操作感はAndroid版公式クライアントとほぼ同じなので特に悩むところは無いと思います。
使い方
最初に開くと三択が表示されるのでOVPN Profileを選択します。
先程作ったクライアント設定ファイル一式を端末内に移動させる必要があります。メールでもできそうな雰囲気ですが、素直にiTunesで転送したほうが早いと思います。
ファイルを転送すると転送したファイルの情報が出るのでそれをADDします。
あとは好きな名称を付ければOKです。
あとは開いてうまく接続されることを願うだけです。
なお、Androidサーバーと同じLAN内では接続できないのでモバイル回線なり外の回線を利用してください。
ということで、証明書低セキュリティ問題も解決しましたし、iOSデバイスで利用することも可能になりましたし完璧になりましたね!(速度が若干遅くなるのはそういうものだしそこまで困っていないのでスルーで)
この証明書のセキュリティ問題が解決しないからGCPでOpenVPNを利用しようと色々やっていたのですが解決してしまうと必要がなくなってしまいますね・・・
今詰まっていますしあちらは完結しないかもしれません・・・
-
前の記事
フォトパネル02をHDMIディスプレイにする 完結編 2019.11.13
-
次の記事
7payからの払い戻しが完了しました 2019.11.15