# githubにファイル置きました: https://github.com/mt08xx/vgc
環境
- Raspberry Pi (今回は3のEthernetポートでネット接続)
- (追記) Ubuntu 16.04 server でも確認しました。
手順
簡易版
sudo apt-get install openvpn -y
wget https://raw.githubusercontent.com/mt08xx/vgc/master/vgc -O ./vgc
chmod +x ./vgc
./vgc update
- サーバ一覧がでてくるので、よさそうなやつの番号を覚えて、
q
をおして、Enter #
のプロンプトで、番号入れて[Enter]
- コンソールが占領されてしまうので、別ウインドウを開くとか、byobuをつかうとかする。
通常版
- openvpn インストール:
% sudo apt-get install openvpn
- スクリプト取得 & 実行属性
wget https://raw.githubusercontent.com/mt08xx/vgc/master/vgc -O ./vgc ; chmod +x ./vgc
-
./vgc
実行 - 鯖リストがless表示されるので、qを押して抜けたら、番号を入れて、[ENTER]
- 接続しにいくはず
- 切断は
- フォアグランドなら、
CTRL-C
で。(いいのか?) - バックグラウンドで起動したら、
sudo killall openvpn
- フォアグランドなら、
- 確認できたら
-
OPT_DAEMON=--daemon
にすると、バックグラウンドで実行される? -
./vgc update
で、鯖リストのアップデート。(OPT_UPDATE=update
で毎回アップデートする)
-
- openvpn起動中にスクリプト呼んで接続しようとすると、切断(
killall openvpn
)します。
# vgc = VpnGate Connect
その他
-
daemonで起動時、うまく接続できなかった場合はどうしたらいいだろうか。
-
base64: invalid input
ぉ?! -
log(英国時間になっとる...)
20 vpn764604678 98.148.134.172 397647 30 21613015 United States 21 vpn978276515 121.243.46.164 374020 10 9880742 India 22 vpn674770516 87.138.118.198 348185 17 10658117 Germany 23 vpn973108027 180.252.102.89 337768 24 11555931 Indonesia
Enter #7
base64: invalid input
Fri Jun 3 01:34:19 2016 OpenVPN 2.3.4 arm-unknown-linux-gnueabihf [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jan 23 2016
Fri Jun 3 01:34:19 2016 library versions: OpenSSL 1.0.1k 8 Jan 2015, LZO 2.08
Fri Jun 3 01:34:19 2016 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Fri Jun 3 01:34:19 2016 Socket Buffers: R=[163840->131072] S=[163840->131072]
Fri Jun 3 01:34:19 2016 UDPv4 link local: [undef]
Fri Jun 3 01:34:19 2016 UDPv4 link remote: [AF_INET]219.164.171.54:1990
Fri Jun 3 01:34:19 2016 TLS: Initial packet from [AF_INET]219.164.171.54:1990, sid=c471f658 60928f48
Fri Jun 3 01:34:19 2016 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Fri Jun 3 01:34:19 2016 VERIFY OK: depth=0, CN=avdh9.com, O=59c8ehhbt fx0s72, C=US
Fri Jun 3 01:34:19 2016 Data Channel Encrypt: Cipher 'AES-128-CBC' initialized with 128 bit key
Fri Jun 3 01:34:19 2016 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Fri Jun 3 01:34:19 2016 Data Channel Decrypt: Cipher 'AES-128-CBC' initialized with 128 bit key
Fri Jun 3 01:34:19 2016 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Fri Jun 3 01:34:19 2016 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA
Fri Jun 3 01:34:19 2016 [avdh9.com] Peer Connection Initiated with [AF_INET]219.164.171.54:1990
Fri Jun 3 01:34:22 2016 SENT CONTROL [avdh9.com]: 'PUSH_REQUEST' (status=1)
Fri Jun 3 01:34:22 2016 PUSH: Received control message: 'PUSH_REPLY,ping 3,ping-restart 10,ifconfig 10.211.1.45 10.211.1.46,dhcp-option DNS 10.211.254.254,dhcp-option DNS 8.8.8.8,route-gateway 10.211.1.46,redirect-gateway def1'
Fri Jun 3 01:34:22 2016 OPTIONS IMPORT: timers and/or timeouts modified
Fri Jun 3 01:34:22 2016 OPTIONS IMPORT: --ifconfig/up options modified
Fri Jun 3 01:34:22 2016 OPTIONS IMPORT: route options modified
Fri Jun 3 01:34:22 2016 OPTIONS IMPORT: route-related options modified
Fri Jun 3 01:34:22 2016 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Fri Jun 3 01:34:22 2016 ROUTE_GATEWAY 10.10.0.1/255.255.248.0 IFACE=eth0 HWADDR=debec0:ff
Fri Jun 3 01:34:22 2016 TUN/TAP device tun0 opened
Fri Jun 3 01:34:22 2016 TUN/TAP TX queue length set to 100
Fri Jun 3 01:34:22 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Fri Jun 3 01:34:22 2016 /sbin/ip link set dev tun0 up mtu 1500
Fri Jun 3 01:34:22 2016 /sbin/ip addr add dev tun0 local 10.211.1.45 peer 10.211.1.46
Fri Jun 3 01:34:22 2016 /sbin/ip route add 219.164.171.54/32 via 10.10.0.1
Fri Jun 3 01:34:22 2016 /sbin/ip route add 0.0.0.0/1 via 10.211.1.46
Fri Jun 3 01:34:22 2016 /sbin/ip route add 128.0.0.0/1 via 10.211.1.46
Fri Jun 3 01:34:22 2016 Initialization Sequence Completed
## 技術的説明 (ggって、こぴぺ..)
- VPNGate鯖一覧csvファイルがダウンロードできて、各行に1鯖の情報、さらにbase64でエンコードされた設定がくっついてる
<br>http://www.vpngate.net/api/iphone/
- `base64 -d`: でコード
- `column`: csvをきれいに整形
- `less`: -N 行番号, -S(--chop-long-lines) 長い行をラッピング。左右のカーソルキーでうごく
<br>https://stackoverflow.com/questions/1875305/command-line-csv-viewer
- `tail -n +3` :3行目以降取得
- `cut -d ',' -f 15` : ','で区切って、15番目のフィールドを取得
## 参考:https://github.com/mt08xx/vgc
githubにおきました。
- 下のbashスクリプトを作って、実行属性をつける。`cat > ./vgc; chmod +x ./vgc`で、こぴぺして、CTRL-d。
```bash:vgc
#!/bin/bash
# http://qiita.com/mt08/items/9f357be12c126d8976b3
OPT_DAEMON= # --daemon
OPT_UPDATE=non_update
VPNGATE_CONF=/etc/openvpn/vpngate.conf
USER_VPNGATE=/etc/openvpn/user_vpngate.txt
VPNGATE_CSV=~/.vpngate.csv
CMD=$1
CMD=${CMD,,} #lowercase
if [ ! -z $CMD ] ; then
if [ $CMD == "update" ] ; then OPT_UPDATE=update ; fi
if [ $CMD == "clean" ] ; then sudo rm $USER_VPNGATE $VPNGATE_CSV $VPNGATE_CONF; echo cleaned ; exit ; fi
fi
function create_userpassfile() {
echo -e "vpn\nvpn" | sudo tee $USER_VPNGATE
sudo chmod 700 $USER_VPNGATE
}
function download_vpngate_csv() {
wget http://www.vpngate.net/api/iphone/ -O - | tail -n +3 > $VPNGATE_CSV
return 0
}
#
if [ -e $USER_VPNGATE ]; then
echo found $USER_VPNGATE
else
create_userpassfile
fi
#
if [ ! -e $VPNGATE_CSV ] || [ $OPT_UPDATE == "update" ] ; then
download_vpngate_csv
else
echo found: $VPNGATE_CSV
fi
# Show Server List
cat $VPNGATE_CSV | cut -d ',' -f 1-10 | column -s, -t | less -#2 -N -S
# Select Server
echo -n "Enter #"
read
sudo rm -f $VPNGATE_CONF
cat $VPNGATE_CSV | sed -n ${REPLY}P | cut -d ',' -f 15 | base64 -d | sed -e "s/#auth-user-pass/auth-user-pass\ \/${USER_VPNGATE//\//\\\/}/g" | sudo tee $VPNGATE_CONF > /dev/null
# openvpn is running ???
pidof openvpn > /dev/null ; if [ $? -eq 0 ]; then sudo killall openvpn ; sleep 5; fi
# Connect
sudo openvpn ${OPT_DAEMON} $VPNGATE_CONF