非ネットワークエンジニアが長期休暇中に苦戦しつつ試行錯誤してみたんで備忘録。
セキュリティ的に穴がないかはよくわかりません。
背景
自宅の固定(?)回線をUQ WiMAXからSoftbank系LTEに変えたら、グローバルIPがなくなって自宅にアクセスしづらくなった。
やったこと
・Google Cloud Platform(GCP) / Google Computing engine(GCE)の無料枠でOpenVPN serverを立てた
・OpenVPNで下記のようなネットワーク構築した(draw.io便利ですね…)
GCEの無料枠でOpenVPN serverを立てた
サーバー準備
まずこの通りにサーバーを準備。
GCPで無料枠のサーバを立るときに、初見でハマりそうなところ
https://qiita.com/ndxbn/items/7ef0a96e409a5b5837bd
OSはCentOS7にした。
あと外部へのGWなVPNとして使うならforwardingを有効にすること。
OpenVPN初期設定
続いてOpenVPNのインストール。
$ sudo su
# yum -y install openvpn
RSA鍵生成
CA/鍵はローカルのUbuntu(on-Win10)で生成。
WSL(Windows subsystem for linux)便利ですね。MSのStoreからubuntu appを入れて初期設定したら、
cmd.exeを起動して
> ubuntu
$ sudo su
# apt-get install easy-rsa
あとは
AWS環境にOpenVPNでVPNを構築
https://qiita.com/hideki/items/657a5701133e713fcf8c
の”各種keyの作成”以降な感じで。
$ cd /usr/share/easy-rsa
“source ./vars”の前にvarsを編集して置くと楽。
$ sudo su
# source ./vars
# ./clean-all
# ./build-ca
Server側は
# ./build-key-server server
# ./build-dh
Client側の鍵は
# ./build-key gateway
と準備する。
# ./build-key client
ネットワーク構築
上記で作った各種鍵(ca.crt,server.crt,server.key,dh2048.pem)を/etc/openvpn/keys以下に転送する。
あとは下記OpenVPNのプロファイルでルーティング指定するくらい。
Server側
Server用Profile
/etc/openvpn/server.conf
/etc/openvpn/ccd/gateway
ifconfig-push 10.8.0.100 10.8.0.101
iroute 192.168.1.0 255.255.255.0
push "route 10.8.0.0 255.255.255.0"
/etc/openvpn/ccd/client
push "route 192.168.1.0 255.255.255.0"
最後に
[root@GCE] # systemctl enable openvpn@server.service
でサービス化
Client/Gateway側
・OpenWRT/LEDEにpackageを追加(openvpn-openssl,luci-app-openvpn)
・VPNなzoneを作って、tun0を入れて、in/out/forwardをacceptした
・/etc/config/openvpnに下記へ追記
config openvpn 'gw_gce'
option enabled '1'
option config '/etc/openvpn/client.conf'
下記プロファイルを/etc/openvpn/client.confとして配置する
Client側は鍵は埋め込むと楽。
easy-rsaで生成したもののうち、
ca: ca.crt
cert: gateway.crt
key: gateway.key
tls-auth: ta.key
をテキストで開いて中身を貼り付ける。
Client/Remote側
AndroidのOpenVPN clientを使った。
プロファイルはgatewayで使ったものと同じ。
埋め込む鍵をclient.crt/client.keyに変更すること。
感想
・topologyを公式がrecommendしているsubnetにしたら”ip r get”で問題なさそうなのにtun内で詰まってしまい時間を浪費→net30にしたら解決
・OpenWRTだとOpenVPNが2.3で、CentOSに入れた2.4系と接続が怪しい。OpenWRTはここ2年更新されないし、と思って調べたらLEDEに変わっていた。
・CentOS7って初期状態だとiptableとかroute入っていない!?でも覚えればipコマンド便利ですね
・CentOS7って初期状態だとipconfig無いの(以下略
・pingの受け側でtcpdumpを使うと色々デバッグできる。