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