メモ: VPNで外出先から自宅ピシにつながるようにした
これはなに
OpenVPNでVPN鯖を立てる | nesotech の焼き直し,推敲版,異世界転生,などなど.
要するに自分用の手順書.
VirtualBoxでUbuntuのVMを立てた
前はデュアルブートでやっていたのだけど,ピシゲームがWindowsでしかできない以上,無理があったので一ヶ月もしないうちにデュアルブートは潰した.
窓を使っている間はサーバー部分は使えないし,サーバー部分を生かそうとすると今度は窓が使えず,Apex Legendsができない,というジレンマがあった.
WSLなんてなかった. 1
VMでもネットワークのやつをブリッジ接続にすれば,ルーターからVMへssh
が通るということを知ったので,「だったらVM立てれば,やりたいことは満たせるじゃん」という経緯.
(VM立てたらホストOSにぶら下がる形のネット接続しか使ったことない程度には,VMよく知らなかった.)
(GNU/Linuxを使うとき,鯖とかCLI環境のときはDebian
,GUIを使うときはLinux Mint
をなんとなく使っているのだけど,どうせVMはヘッドレス起動しかしてないからDebianでも良かったなあと,と思っている.)
やりたいこと
OpenVPNを使って外出先からでも軽率に自宅にssh叩きたい
※とくに,弊ハウスは✨無料インターネット完備物件✨2なので,mydnsとかでDDNSをやってもping
やssh
その他が自室まで到達できず,軽率に宅鯖を使えないという問題がある.
環境
鯖: Debian 9.8 @ConoHa VPS(1GB)
クライアント: iOS12 / Android8 / Windows10 / Ubuntu18.04 (今のところ)
手順
鯖側
下準備
sudo apt install openvpn git clone https://github.com/openvpn/easy-rsa
※apt install easy-rsa
で入れるやり方もあるらしいんだけど,git clone
でやる方が慣れているのでなんとなく.
cd easy-rsa/easyrsa3 ./easyrsa init-pki ./easyrsa build-ca ./easyrsa build-server-full server nopass ./easyrsa gen-dh ./easyrsa gen-crl sudo cp pki/ca.crt \ pki/dh.pem \ pki/crl.pem \ pki/issued/server.crt \ pki/private/server.key /etc/openvpn/ sudo chmod o+r /etc/openvpn/crl.pem
sudo apt install ufw sudo ufw enable sudo ufw allow 1194/udp <-- もしくは 443/tcp
サーバー側設定ファイル(/etc/openvpn/server.conf)
サンプル
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem crl-verify crl.pem ifconfig-pool-persist ipp.txt <-- デバイスごとにIPアドレスを固定しておける server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "route 10.8.0.0 255.255.255.0" push "dhcp-option DNS 8.8.8.8" client-to-client keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log log /var/log/openvpn.log log-append /var/log/openvpn.log verb 3
なんかよしなにする
/etc/default/ufw
のDEFAULT_FORWARD_POLICY
をDROP
からACCEPT
に変える/etc/ufw/sysctl.conf
のnet/ipv4/ip_forward=1
のコメントアウトを外す- `/etc/ufw/before.rules{ の末尾に以下を追記
COMMIT *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE COMMIT
クライアント用の鍵を作っておく
./easyrsa build-client-full [デバイス名]
で作れる.
./easyrsa build-client-full [デバイス名] nopass
とすればパスフレーズなしの鍵も作れる(非推奨).
easy-rsa/easyrsa3/pki/
以下にissued/デバイス名.crt
とprivate/デバイス名.key
ができてるので,必要に応じてscp
とかでクライアントに落としておく.
※iOSでやる場合はクライアント側設定ファイルに直接コピペするのでなくてもよい.
sudo ufw reload sudo systemctl disable openvpn sudo systemctl enable openvpn@server sudo systemctl start openvpn@server
これで下準備は終わり.
クライアンヨ側の設定
※それぞれでクライアントの設定の仕方が違うので章分けしておく.
共通: クライアント設定ファイルの作成
👇example.comに1194/udpでTUNを使う場合のclient.conf
テンプレ.example.com 1194
とか
proto udp
とかは適宜書き換える.
client dev tun proto udp remote example.com 1194 resolv-retry infinite nobind user nobody group nobody comp-lzo verb 3 ca ca.crt cert hoge.crt key hoge.key
iOSとか用に鍵情報を直接書き込む場合はca ca.crt
の代わりに,
<ca> hogehogehogehoge......... </ca>
として記述する.
<cert>
や<key>
についても同様にやる.cat client.crt >> client.conf
とかでやるとなんとなく楽.
もちろん直接書き込まなくても設定はできる.(個人的には1ファイルで済むならそっちが楽かな...というかんじ)
その1: ヘッドレスのUbuntu(VM) からつなぐ(要client.conf)
Ubuntuの場合,nobodyとかnogroupとかいうuserやgroupがないらしいので,$USER
とかotaku
とかなんか適当に書き換えておくこと. 3
宅鯖で動く(予定)やつなので,起動時に勝手につながるようにしておく.
sudo apt install openvpn sudo systemctl enable openvpn@client sudo cp ca.crt client.crt client.key client.conf /etc/openvpn/
openvpn client.conf
で検証できる.問題なければsudo systemctl start openvpn@client
その2: スマートホォン(iOS, Android) からつなぐ(要client.ovpn)
App Store/Play StoreからOpenVPN Connect
をインストール.
こんなの.--> https://itunes.apple.com/jp/app/openvpn-connect/id590379981
👆のテンプレを適宜書き換えたあと, client.conf
となっているのをclient.ovpn
にリネーム.こうしないと,👆のOpenVPN Connect Appが読めない.
iOSはiTunesで転送するとよい,らしいが,アプリが設定を取り込むたびに.ovpn
ファイルは消費されて消えてしまうのでOneDriveやDropboxとかを経由するのがお手軽.
あとはアプリ起動してトグルをガチャガチャきゅ~と・ふぃぎゅ@
4するとVPNに繋がったり繋がったりする.フリーWi-Fiスポットとかで重宝する.
その3: Windowsの入ってるピシ からつなぐ
※client.confはなくてもいい
vpnuxをインストールする.
→https://www.plum-systems.co.jp/vpnux-client/
vpnuxの設定画面は👇
とくになし.
※OpenVPNコミュニティ謹製のやつもあるらしいけど,使ったこと無いので割愛.
あとがき
途中から書くの飽きちゃった.
Windowsで特にそうなんだけど,起動時に自動接続できるってのじゃないのでSoftEtherでL2TP/IPsecのものもそのうち立てたい.
<追記>
Windowsでも起動時自動接続できました.
→
nesosuke.hatenadiary.com
<追記ここまで>
ともあれ,これでVPS上でBitwardenをセルフホスティングしなくてもよさそうだし,いろいろ捗りそう.