Free Wi-Fiなどを利用する際は、VPNに接続すると安全です。仕組みは、通信が暗号化されるトンネルのようなものを作り、そこにトラフィックを通すことで通信内容の傍受などを阻害する効果があります。

ただ、VPNはなかなか面倒です。一番良いのは、サービスにインストールして使えるようにすることですが、費用がかかります。

今回は、Web UIから設定が行えるpritunlを使ってみようと思います。

https://github.com/Fridus/docker-pritunl

$ mkdir mongo
$ sudo docker-compose up -d

docker-compose.yml

network:
  image: busybox
  ports:
    - "9700:443"
    - "1194:1194/udp"
  restart: always
  tty: true
mongo:
  image: mongo
  volumes:
    - ./mongo:/data/db
  restart: always
  net: container:network
pritunl:
  image: fridus/pritunl
  privileged: true
  environment:
    - MONGO_URI=mongodb://127.0.0.1:27017/pritunl
  restart: always
  net: container:network
$ ifconfig
192.168.1.4

$ chromium https://192.168.1.4:9700
$ chromium https://localhost:9700
	user,password:pritunl

# IP : 192.168.1.4
# User -> Add Organization, Add User
# Server -> Add Server(Port 1194/udp), Attach Organization, Start Server
# User -> download profile

あとは、clientをインストールして、DLしたprofileをインポートするだけです。clientは、Tunnelblickでもpritunlでもどちらでもいいです。

WANからアクセスする際は、ルーターにてポートフォワーディングなどをします。例えば、ルーターのグローバルIPが1.1.1.1だったとしましょう。そこで、1.1.1.1への特定のポートのアクセスを、ローカルネットワークの特定のポートに転送する設定です。

ただ、downloadしたprofileは、ローカルIPを指定していますので、設定ファイルを書き直さなければなりません。

$aunpack default.tar
$ vim vpn_default.ovpn
- remote 192.168.1.4 1194 udp
+ remote 1.1.1.1 xxxxxx udp

xxxxxxのところは、特定されにくそうな番号を指定すると良いです。それをdockerで指定しているポート、ここでは1194ですが、そこに転送する設定を保存します。

1.1.1.1:xxxxx/udp ----> 192.168.1.4:1194/udp

このようにすることで、例えば、iOSのOpenVPNでvpn_default.ovpnを開き、キャリア回線(WAN)からVPN Serverに接続できるようになります。

なお、pritunlの設定もルーターのGlobal IPを指定して、Restart Serverします。そうしないと、Virtual Networkが起動せず、Local IPで接続しているうちはVirtual Networkが立ち上がっているので、Globalからもアクセスできますが、それが切断されるとGlobalからの接続もできなくなってしまいます。