OpenVPN-L2IX (by nabeken)

OpenVPNを使って、L2IXをつくってみようという計画。AS 64529上で動いている OpenVPN へ接続します。

副作用として、非固定IPアドレスでも安定してピアリングできるようになります。

証明書の作り方

OpenVPNの配布物に easy-rsa というツールがあります。これはその名の通り、証明書の生成を簡単に行えるツールです。

FreeBSDでは /usr/local/share/doc/openvpn/easy-rsa にあるようです。

easy-rsa では、そのディレクトリ配下に鍵を保存するため、生成前にあらかじめ適当な場所へコピーしてください。

# cp -r /usr/local/share/doc/openvpn/easy-rsa /usr/local/etc/openvpn

# cd /usr/local/etc/openvpn/easy-rsa

# chmod +x ./vars

# /bin/sh

# . ./vars

ここまでで初期設定完了です。次は証明書署名要求を生成します。

# mkdir keys

# /bin/sh ../build-req ホスト名

証明書の各パラメータを対話的に入力するモードになります。以下の指定以外は好きな値を入れてください。

Organization Name (eg, company) :IHANet

Organizational Unit Name (eg, section) :IHANet-IX-OSAKA

Common Name (eg, your name or your server's hostname): ホスト名

証明書署名要求が keys/ホスト名.csr に生成されます。.keyが秘密鍵になります。生成されたホスト名.csr ファイル(証明書署名要求)を私までメール(nabeken at gmail.com)で送信してください。

署名したものを返信します。ファイル名はホスト名.crtになっているはずです。そのファイルを keys/ 以下へ保存してください。

# openssl dhparam -out dh1024.pem 1024

を実行して、dh1024.pem ファイルを作り、keys/ 以下へ保存してください。

# fetch http://projects.tsuntsun.net/~nabeken/ihanet-ix-ca.crt 等を実行し、keys/ 以下へ保存してください。

設定 (/usr/local/etc/openvpn/ix.conf)

tls-client

remote 60.56.118.148

port 1198

proto udp

# dev: tapデバイスの名前を指定してください (FreeBSDの場合: tap100など)

dev iha_ix0

dev-type tap

keepalive 10 120

# 適当なユーザ名に変えてください

user nobody

group nogroup

persist-key

persist-tun

verb 0

# 認証局の証明書

ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt

# 署名された証明書

cert /usr/local/etc/openvpn/easy-rsa/keys/ホスト名.crt

# 証明書の秘密鍵

key /usr/local/etc/openvpn/easy-rsa/keys/ホスト名.key

# dh パラメータ

dh /usr/local/etc/openvpn/easy-rsa/keys/dh1024.pem

# up に指定されたコマンドには引数が渡される

# cf. # http://openvpn.net/index.php/open-source/documentation/manuals/65-openvpn-20x-manpage.html

up /usr/local/bin/ihanet_openvpn_up_iha_ix0.sh

# 最新版(2.1.r19)等だと外部コマンドを動かすのに以下の設定が必要なので、設定してください。以前のバージョンであれば設定しないでください。

script-security 2

設定できれば、openvpnを起動します。テスト目的なら、

# openvpn --config /usr/local/etc/openvpn/ix.conf --verb 4

とすれば、フォアグラウンドで起動します。tap? が生成されているはずです。疎通確認は以下で可能です。

# ping6 -I tap? ff02::1

# ping6 -I tap? fe80::0001:0000:fc11:10

など。

Linux の up コマンドの一例

#!/bin/sh

TAP_DEV=$1

IF_ADDR="fe80::fc11:cafe:10/64"

ip link set "$TAP_DEV" up

ip addr add "$IF_ADDR" dev "$TAP_DEV"

ip link set mtu 1280 dev "$TAP_DEV"

FreeBSD の up コマンドの一例

#!/bin/sh

IFACE=$1

ifconfig $IFACE up

ifconfig $IFACE inet6 fe80::fc11:cafe:12/64

ifconfig $IFACE mtu 1280