さくらVPSにEthernet BridgingなOpenVPNをインストールしてみました

さくらVPS上のGentoo LinuxをOpenVPNサーバーに仕立ててみました。 出先から自宅のPCに接続したいという動機でVPNを構築したのですが、どうにか使えるようになったので記録を残しておきます。

構成

まず今回構築するVPNの構成です。

f:id:mazgi:20141210070213p:plain

※画像素材をYAMAHA株式会社よりお借りしています。 さくらVPS上にOpenVPNサーバーを立て、自宅ネットワーク上のホストに出先のノートPCから接続できるようにします。 また、OpenVPNをEthernet Bridgeモードで構築し、出先のノートPCと自宅ネットワークのホストは互いにBonjourAvahiで名前解決できるようにします。

ホストは以下の3台とします。

Bowmore
さくらVPS, OpenVPNサーバー
Caolila
MacBook Air, OpenVPNクライアント, 出先から接続
PortEllen
VirtualBoxゲスト, OpenVPNクライアント, 自宅ネットワーク上

個人向けVPSサービスでTAPドライバを使ってEthernet BridgeモードでOpenVPSサーバーをセットアップする場合、NICがグローバル接続用のもの1つしかなく、bridgeにこの唯一のNICを組み入れてしまうとグローバル接続ができなくなってしまうという問題があります。 しかしこの問題はLinuxカーネルに含まれるDummy net driverを使うことで対処できます。

今回はGentoo LinuxをOpenVPNサーバーにしましたが、パッケージ管理システムとカーネルモジュールに関する部分を読み替えていただければCentOSやDebian GNU/Linuxでも同じ要領でセットアップできると思います。

OpenVPNのセットアップ

まずOpenVPN自体をセットアップします。

OpenVPNパッケージインストール

PortageでOpenVPNパッケージをインストールします。 USEフラグ(configureオプション)はこんな感じです。

[root@Bowmore] # emerge -pv openvpn
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild   R    ] net-misc/openvpn-2.2.2  USE="examples pam ssl -iproute2 -minimal -passwordsave -pkcs11 (-selinux) -static" 0 kB
Total: 1 package (1 reinstall), Size of downloads: 0 kB

認証局の設定

OpenVPNを使うためにはCA(認証局)が必要となりますが、今回はOpenVPNパッケージに含まれているeasy-rsaという簡易CAツールを使います。 CA, OpenVPNサーバー, OpenVPNクライアントにそれぞれ証明書が必要ですが、すべてOpenVPNサーバーとなるホスト上で作ることにします。

Gentoo Linuxの場合、easy-rsaは/usr/share/openvpn/easy-rsaにインストールされます。 varsという環境変数を設定するためのファイルがありますので、証明書を作成する前にKEY_ではじまる値を編集します。

[root@Bowmore] # grep -E '^\s*[^#;]' /usr/share/openvpn/easy-rsa/vars
export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=1024
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="JP"
export KEY_PROVINCE="Tokyo"
export KEY_CITY="Suginami"
export KEY_ORG="BooMTown"
export KEY_EMAIL="openvpn@example.com"
export KEY_CN="ca.openvpn.example.com"
export KEY_NAME="Jhon Doe"
export KEY_OU="personal"
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

CA証明書の作成

build-caスクリプトを実行してCAの秘密鍵と証明書を作ります。

[root@Bowmore] # cd /usr/share/openvpn/easy-rsa
[root@Bowmore] # . ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/openvpn/easy-rsa/keys
[root@Bowmore] # ./clean-all
[root@Bowmore] # ./build-ca
Generating a 1024 bit RSA private key
............++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Suginami]:
Organization Name (eg, company) [BooMTown]:
Organizational Unit Name (eg, section) [personal]:
Common Name (eg, your name or your server's hostname) [ca.openvpn.example.com]:
Name [Jhon Doe]:
Email Address [openvpn@example.com]:

2つのファイルが作られます。

  • ca.key : CAの秘密鍵
  • ca.crt : CAの証明書
[root@Bowmore] # ls -l /usr/share/openvpn/easy-rsa/keys/ca.(key|crt)
-rw-r--r-- 1 root root 1440  /usr/share/openvpn/easy-rsa/keys/ca.crt
-rw------- 1 root root  916  /usr/share/openvpn/easy-rsa/keys/ca.key

サーバー証明書の作成

build-key-serverスクリプトを実行して、OpenVPNサーバーの秘密鍵と証明書を作ります。

[root@Bowmore] # cd /usr/share/openvpn/easy-rsa && . ./vars && ./build-key-server bowmore
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/openvpn/easy-rsa/keys
Generating a 1024 bit RSA private key
.............++++++
writing new private key to 'bowmore.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Suginami]:
Organization Name (eg, company) [BooMTown]:
Organizational Unit Name (eg, section) [personal]:
Common Name (eg, your name or your server's hostname) [bowmore]:
Name [Jhon Doe]:
Email Address [openvpn@example.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Suginami'
organizationName :PRINTABLE:'BooMTown'
organizationalUnitName:PRINTABLE:'personal'
commonName :PRINTABLE:'bowmore'
name :PRINTABLE:'Jhon Doe'
emailAddress :IA5STRING:'openvpn@example.com'
Certificate is to be certified until Nov 23 11:15:12 2022 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

3つのファイルが作られます。

  • ${サーバー名}.key : サーバーの秘密鍵
  • ${サーバー名}.csr : サーバーからCAへの証明書署名要求
  • ${サーバー名}.crt : サーバーの証明書
[root@Bowmore] # ls -l /usr/share/openvpn/easy-rsa/keys/bowmore.(crt|csr|key)
-rw-r--r-- 1 root root 4188  /usr/share/openvpn/easy-rsa/keys/bowmore.crt
-rw-r--r-- 1 root root  733  /usr/share/openvpn/easy-rsa/keys/bowmore.csr
-rw------- 1 root root  912  /usr/share/openvpn/easy-rsa/keys/bowmore.key

クライアント証明書の作成

build-keyスクリプトを実行してクライアントの秘密鍵と証明書を作ります。

[root@Bowmore] # cd /usr/share/openvpn/easy-rsa && . ./vars && ./build-key PortEllen
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/openvpn/easy-rsa/keys
Generating a 1024 bit RSA private key
...............++++++
writing new private key to 'PortEllen.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Suginami]:
Organization Name (eg, company) [BooMTown]:
Organizational Unit Name (eg, section) [personal]:
Common Name (eg, your name or your server's hostname) [PortEllen]:
Name [Jhon Doe]:
Email Address [openvpn@example.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Tokyo'
localityName          :PRINTABLE:'Suginami'
organizationName      :PRINTABLE:'BooMTown'
organizationalUnitName:PRINTABLE:'personal'
commonName            :PRINTABLE:'PortEllen'
name                  :PRINTABLE:'Jhon Doe'
emailAddress          :IA5STRING:'openvpn@example.com'
Certificate is to be certified until Dec  2 05:21:17 2022 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

各クライアント毎に3つずつファイルが作られます。

  • ${クライアント名}.key : クライアントの秘密鍵
  • ${クライアント名}.csr : クライアントからCAへの証明書署名要求
  • ${クライアント名}.crt : クライアントの証明書
[root@Bowmore] # ls -l /usr/share/openvpn/easy-rsa/keys/(PortEllen|Caolila).(crt|csr|key)
-rw-r--r-- 1 root root 4066  /usr/share/openvpn/easy-rsa/keys/Caolila.crt
-rw-r--r-- 1 root root  733  /usr/share/openvpn/easy-rsa/keys/Caolila.csr
-rw------- 1 root root  916  /usr/share/openvpn/easy-rsa/keys/Caolila.key
-rw-r--r-- 1 root root 4072  /usr/share/openvpn/easy-rsa/keys/PortEllen.crt
-rw-r--r-- 1 root root  737  /usr/share/openvpn/easy-rsa/keys/PortEllen.csr
-rw------- 1 root root  916  /usr/share/openvpn/easy-rsa/keys/PortEllen.key

build-dhスクリプトを実行して、Diffie-Hellman鍵交換用のパラメータを生成します。

[root@Bowmore] # ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.......................+.......+........
[root@Bowmore] # ls -l /usr/share/openvpn/easy-rsa/keys/dh1024.pem
-rw-r--r-- 1 root root 245  /usr/share/openvpn/easy-rsa/keys/dh1024.pem

サーバー側設定ファイルの編集

/usr/share/openvpn/easy-rsa/keys/から/etc/openvpn/に以下のファイルをコピーします。

  • ca.crt : CAの証明書
  • ${サーバー名}.key : サーバーの秘密鍵
  • ${サーバー名}.crt : サーバーの証明書

OpenVPNサーバーの設定ファイルを/etc/openvpn/server.confという名前作ります。 内容は以下の通りです。

[root@Bowmore] # grep -E '^\s*[^#;]' /etc/openvpn/server.conf
port 1194
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server-bridge 172.16.255.1 255.255.255.0 172.16.255.16 172.16.255.31
client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 4

設定ファイルで書いたファイル名に合わせてシンボリックリンクを張ります。

[root@Bowmore] # ls -l /etc/openvpn/
total 64
-rw-r--r-- 1 root root  4188  bowmore.crt
-rw------- 1 root root   912  bowmore.key
-rw-r--r-- 1 root root  1440  ca.crt
-rw-r--r-- 1 root root   245  dh1024.pem
-r-xr-xr-x 1 root root   943  down.sh
lrwxrwxrwx 1 root root    11  openvpn.conf -> server.conf
-rw-r--r-- 1 root root 10360  server.conf
lrwxrwxrwx 1 root root    11  server.crt -> bowmore.crt
lrwxrwxrwx 1 root root    11  server.key -> bowmore.key
-r-xr-xr-x 1 root root  2594  up.sh

クライアント側設定ファイルの編集

easy-rsaを実行したホストの/usr/share/openvpn/easy-rsa/keys/から各クライアントの/etc/openvpn/に以下のファイルをコピーします。

  • ca.crt : CAの証明書
  • ${クライアント名}.key : クライアントの秘密鍵
  • ${クライアント名}.crt : クライアントの証明書

OpenVPNクライアントの設定ファイルを/etc/openvpn/client.confという名前作ります。 内容は以下の通りです。

[root@PortEllen] # grep -E '^\s*[^#;]' /etc/openvpn/client.conf
client
dev tap
proto udp
remote bowmore.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3

設定ファイルで書いたファイル名に合わせてシンボリックリンクを張ります。

[root@PortEllen] # ls -l /etc/openvpn/
total 24
-rw-r--r-- 1 root 4072 Dec 11 06:11 PortEllen.crt
-rw------- 1 root  916 Dec 11 06:11 PortEllen.key
-rw-r--r-- 1 root 1440 Nov 25 20:14 ca.crt
-rw-r--r-- 1 root  415 Dec 11 07:09 client.conf
lrwxrwxrwx 1 root   13 Dec 11 07:16 client.crt -> PortEllen.crt
lrwxrwxrwx 1 root   13 Dec 11 07:16 client.key -> PortEllen.key
-rwxr-xr-x 1 root  943 Dec  4 15:01 down.sh*
lrwxrwxrwx 1 root   11 Dec 11 07:27 openvpn.conf -> client.conf
-rwxr-xr-x 1 root 2594 Dec  4 15:01 up.sh*

ここまででOpenVPN自体のセットアップは完了しているので、Routingモードでの動作確認を行うこともできます。

Ethernet Bridgeのセットアップ

Dummy net driverのカーネルモジュールが足りなかったのでビルドするところからはじめます。 以下のいずれかで出力があれば、すでにDummy net driver supportは有効になっています。改めてカーネルモジュールをビルドする必要はないと思います。

  • lsmod | grep -E '^dummy\s'
  • zcat /proc/config.gz | grep -E '^CONFIG_DUMMY=(y|m)$'

(必要なら)カーネルモジュールのビルド

genkernel–menuconfig付きで実行、またはmake menuconfig等を実行します。

f:id:mazgi:20141210070354p:plain

OSを再起動したくないのでDummy net driver supportをモジュール(CONFIG_DUMMY=m)にします。genkernelを使う場合は/usr/src/linuxが現在起動しているカーネルと同じバージョンを指していることを確認してください。

[root@Bowmore] # uname -a
Linux Bowmore 3.3.8-gentoo #2 SMP Sat Aug 4 09:57:38 JST 2012 x86_64 Intel(R) Xeon(R) CPU E5645 GenuineIntel GNU/Linux
[root@Bowmore] # ls -l /usr/src/linux
lrwxrwxrwx 1 root root 18  /usr/src/linux -> linux-3.3.8-gentoo
[root@Bowmore] # genkernel --menuconfig --no-clean --no-mrproper --lvm all
* Gentoo Linux Genkernel; Version 3.4.24_p2
* Running with options: --menuconfig --no-clean --no-mrproper --lvm all

* Linux Kernel 3.3.8-gentoo for x86_64...
* kernel: --mrproper is disabled; not running 'make mrproper'.
*         >> Running oldconfig...
* kernel: --clean is disabled; not running 'make clean'.
* kernel: >> Invoking menuconfig...
#
# configuration written to .config
#

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

*         >> Compiling 3.3.8-gentoo bzImage...
*         >> Not installing firmware as it's included in the kernel already (CONFIG_FIRMWARE_IN_KERNEL=y)...
*         >> Compiling 3.3.8-gentoo modules...
* Copying config for successful build to /etc/kernels/kernel-config-x86_64-3.3.8-gentoo
* blkid: >> Using cache
* busybox: >> Using cache
* initramfs: >> Initializing...
*         >> Appending base_layout cpio data...
*         >> Appending auxilary cpio data...
*         >> Appending busybox cpio data...
*         >> Appending lvm cpio data...
*           LVM: Adding support (using local static binary /sbin/lvm.static)...
*         >> Appending modules cpio data...
*         >> Appending blkid cpio data...
*
* Kernel compiled successfully!
*
* Required Kernel Parameters:
*     real_root=/dev/$ROOT
*
*     Where $ROOT is the device node for your root partition as the
*     one specified in /etc/fstab
*
* If you require Genkernel's hardware detection features; you MUST
* tell your bootloader to use the provided INITRAMFS file. Otherwise;
* substitute the root argument for the real_root argument if you are
* not planning to use the initramfs...

* WARNING... WARNING... WARNING...
* Additional kernel cmdline arguments that *may* be required to boot properly...
* add "dolvm" for lvm support
* With support for several ext* filesystems around it may be needed to
* add "rootfstype=ext3" or "rootfstype=ext4"

* Do NOT report kernel bugs as genkernel bugs unless your bug
* is about the default genkernel configuration...
*
* Make sure you have the latest ~arch genkernel before reporting bugs.

起動しているカーネルと同じバージョンでモジュールをビルドしたので、OSは再起動せずにmodprobeだけ実行します。 もしDummy net driverがモジュールとしてビルドされていて読み込まれていない場合には同様にmodprobe dummyを実行してください。

[root@Bowmore] # modprobe dummy
[root@Bowmore] # lsmod | grep dummy
dummy                   1946  0

bridge-utilsパッケージのインストール

bridge-utilsがインストールされていなければインストールします。

[root@Bowmore] # emerge -pv bridge-utils

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] net-misc/bridge-utils-1.4  0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

Bridge Interfaceの設定

IP Forwardingが有効になっていることを確認します。

[root@Bowmore] # cat /proc/sys/net/ipv4/ip_forward
1

/etc/conf.d/netdummy0br0インタフェースの設定を追記します。

[root@Bowmore] # grep -E '^\s*[^#;]' /etc/conf.d/net | grep -v 'eth0'
config_dummy0=(null)
tuntap_tap0="tap"
config_tap0=("0.0.0.0 promisc")
bridge_br0="dummy0 tap0"
config_br0=(null)
depend_br0() {
  need net.dummy0 net.tap0
}

起動スクリプトnet.dummy0net.br0を作ります。

[root@Bowmore] # cd /etc/init.d
[root@Bowmore] # ln -s net.lo net.dummy0
[root@Bowmore] # ln -s net.lo net.br0

net.br0をdefaultランレベルに追加します。

[root@Bowmore] # rc-update add net.br0 default
 * service net.br0 added to runlevel default

動作確認

起動確認

net.br0を起動します。

[root@Bowmore] # /etc/init.d/net.br0 start
 * Bringing up interface br0
 *   Creating bridge br0 ...
 *   Adding ports to br0
 *     dummy0 ...                                                         [ ok ]
 *     tap0 ...                                                           [ ok ]
 *   You are using a bash array for config_br0.
 *   This feature will be removed in the future.
 *   Please see net.example for the correct format for config_br0.        [ ok ]

OpenVPNをフォアグラウンドで起動してみます。

[root@Bowmore] # cd /etc/openvpn
[root@Bowmore] # openvpn server.conf
Mon Nov 26 01:21:04 2012 OpenVPN 2.2.2 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [eurephia] built on Aug 27 2012
Mon Nov 26 01:21:04 2012 NOTE: when bridging your LAN adapter with the TAP adapter, note that the new bridge adapter will often take on its own IP address that is different from what the LAN adapter was previously set to
Mon Nov 26 01:21:04 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Mon Nov 26 01:21:04 2012 TUN/TAP device tap0 opened
Mon Nov 26 01:21:04 2012 UDPv4 link local (bound): [undef]:1194
Mon Nov 26 01:21:04 2012 UDPv4 link remote: [undef]
Mon Nov 26 01:21:04 2012 Initialization Sequence Completed

問題なさそうです。

接続確認

サーバー側の起動は確認できたのでOpenVPNをサービスとして起動しておきます。

[root@Bowmore] # /etc/init.d/openvpn start
 * Starting openvpn ...                                                   [ ok ]

クライアントから接続してみます。

[root@Bowmore] # tailf /var/log/openvpn/openvpn.log
Wed Dec 12 07:02:55 2012 us=331767 MULTI: multi_create_instance called
Wed Dec 12 07:02:55 2012 us=332026 113.xxx.yyy.zzz:51127 Re-using SSL/TLS context
Wed Dec 12 07:02:55 2012 us=332106 113.xxx.yyy.zzz:51127 LZO compression initialized
Wed Dec 12 07:02:55 2012 us=332542 113.xxx.yyy.zzz:51127 Control Channel MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 EL:0 ]
Wed Dec 12 07:02:55 2012 us=332612 113.xxx.yyy.zzz:51127 Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 ET:32 EL:0 AF:3/1 ]
Wed Dec 12 07:02:55 2012 us=332657 113.xxx.yyy.zzz:51127 Local Options String: 'V4,dev-type tap,link-mtu 1574,tun-mtu 1532,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
Wed Dec 12 07:02:55 2012 us=332677 113.xxx.yyy.zzz:51127 Expected Remote Options String: 'V4,dev-type tap,link-mtu 1574,tun-mtu 1532,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
Wed Dec 12 07:02:55 2012 us=332715 113.xxx.yyy.zzz:51127 Local Options hash (VER=V4): 'dcf96af5'
Wed Dec 12 07:02:55 2012 us=332763 113.xxx.yyy.zzz:51127 Expected Remote Options hash (VER=V4): '156e3b19'
Wed Dec 12 07:02:55 2012 us=332865 113.xxx.yyy.zzz:51127 TLS: Initial packet from 113.xxx.yyy.zzz:51127, sid=215ada78 94de0d6d
Wed Dec 12 07:02:55 2012 us=488484 113.xxx.yyy.zzz:51127 VERIFY OK: depth=1, /C=JP/ST=Tokyo/L=Suginami/O=BooMTown/OU=personal/CN=ca.openvpn.example.com/name=Jhon_Doe/emailAddress=openvpn@example.com
Wed Dec 12 07:02:55 2012 us=488729 113.xxx.yyy.zzz:51127 VERIFY OK: depth=0, /C=JP/ST=Tokyo/L=Suginami/O=BooMTown/OU=personal/CN=PortEllen/name=Jhon_Doe/emailAddress=openvpn@example.com
Wed Dec 12 07:02:55 2012 us=543289 113.xxx.yyy.zzz:51127 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Wed Dec 12 07:02:55 2012 us=543381 113.xxx.yyy.zzz:51127 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Dec 12 07:02:55 2012 us=543467 113.xxx.yyy.zzz:51127 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Wed Dec 12 07:02:55 2012 us=543523 113.xxx.yyy.zzz:51127 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Dec 12 07:02:55 2012 us=554146 113.xxx.yyy.zzz:51127 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Wed Dec 12 07:02:55 2012 us=554254 113.xxx.yyy.zzz:51127 [PortEllen] Peer Connection Initiated with 113.xxx.yyy.zzz:51127
Wed Dec 12 07:02:57 2012 us=840876 PortEllen/113.xxx.yyy.zzz:51127 PUSH: Received control message: 'PUSH_REQUEST'
Wed Dec 12 07:02:57 2012 us=841145 PortEllen/113.xxx.yyy.zzz:51127 SENT CONTROL [PortEllen]: 'PUSH_REPLY,route-gateway 172.16.255.1,ping 10,ping-restart 120,ifconfig 172.16.255.18 255.255.255.0' (status=1)
Wed Dec 12 07:02:57 2012 us=870797 PortEllen/113.xxx.yyy.zzz:51127 MULTI: Learn: 66:de:0c:66:9d:56 -> PortEllen/113.xxx.yyy.zzz:51127
[root@PortEllen] # cd /etc/openvpn
[root@PortEllen] # openvpn client.conf
Wed Dec 12 07:02:33 2012 OpenVPN 2.2.2 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [eurephia] built on Dec  4 2012
Wed Dec 12 07:02:33 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Wed Dec 12 07:02:33 2012 LZO compression initialized
Wed Dec 12 07:02:33 2012 Control Channel MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 EL:0 ]
Wed Dec 12 07:02:33 2012 Socket Buffers: R=[212992->131072] S=[212992->131072]
Wed Dec 12 07:02:33 2012 Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 ET:32 EL:0 AF:3/1 ]
Wed Dec 12 07:02:33 2012 Local Options hash (VER=V4): '156e3b19'
Wed Dec 12 07:02:33 2012 Expected Remote Options hash (VER=V4): 'dcf96af5'
Wed Dec 12 07:02:33 2012 UDPv4 link local: [undef]
Wed Dec 12 07:02:33 2012 UDPv4 link remote: 49.aaa.bbb.ccc:1194
Wed Dec 12 07:02:33 2012 TLS: Initial packet from 49.aaa.bbb.ccc:1194, sid=f493363c d005952c
Wed Dec 12 07:02:33 2012 VERIFY OK: depth=1, /C=JP/ST=Tokyo/L=Suginami/O=BooMTown/OU=personal/CN=ca.openvpn.example.com/name=Jhon_Doe/emailAddress=openvpn@example.com
Wed Dec 12 07:02:33 2012 VERIFY OK: nsCertType=SERVER
Wed Dec 12 07:02:33 2012 VERIFY OK: depth=0, /C=JP/ST=Tokyo/L=Suginami/O=BooMTown/OU=personal/CN=bowmore/name=Jhon_Doe/emailAddress=openvpn@example.com
Wed Dec 12 07:02:34 2012 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Wed Dec 12 07:02:34 2012 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Dec 12 07:02:34 2012 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Wed Dec 12 07:02:34 2012 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Dec 12 07:02:34 2012 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Wed Dec 12 07:02:34 2012 [bowmore] Peer Connection Initiated with 49.aaa.bbb.ccc:1194
Wed Dec 12 07:02:36 2012 SENT CONTROL [bowmore]: 'PUSH_REQUEST' (status=1)
Wed Dec 12 07:02:36 2012 PUSH: Received control message: 'PUSH_REPLY,route-gateway 172.16.255.1,ping 10,ping-restart 120,ifconfig 172.16.255.18 255.255.255.0'
Wed Dec 12 07:02:36 2012 OPTIONS IMPORT: timers and/or timeouts modified
Wed Dec 12 07:02:36 2012 OPTIONS IMPORT: --ifconfig/up options modified
Wed Dec 12 07:02:36 2012 OPTIONS IMPORT: route-related options modified
Wed Dec 12 07:02:36 2012 TUN/TAP device tap0 opened
Wed Dec 12 07:02:36 2012 TUN/TAP TX queue length set to 100
Wed Dec 12 07:02:36 2012 /bin/ifconfig tap0 172.16.255.18 netmask 255.255.255.0 mtu 1500 broadcast 172.16.255.255
Wed Dec 12 07:02:36 2012 Initialization Sequence Completed
^CWed Dec 12 07:02:38 2012 event_wait : Interrupted system call (code=4)
Wed Dec 12 07:02:38 2012 TCP/UDP: Closing socket
Wed Dec 12 07:02:38 2012 Closing TUN/TAP interface
Wed Dec 12 07:02:38 2012 /bin/ifconfig tap0 0.0.0.0
Wed Dec 12 07:02:38 2012 SIGINT[hard,] received, process exiting

MacBook Air(Caolila)にもHomebrewでOpenVPNを入れてつないでみます。 回線はau iPhoneのテザリングです。

f:id:mazgi:20141210070453j:plain

無事接続できました!