OpenVPN 2.0 Ethernet Bridging 日本語訳

ブリッジングの概要

ルーティングモード vs. ブリッジモードの概要については,FAQを参照されたい.

イーサネットのブリッジは,基本的に,イーサネットのインタフェースと一個以上の仮想TAPインタフェースを結合させ,一つのブリッジインタフェースの下でブリッジングを行うものである.これは,ソフトウェアで物理イーサネットのスイッチングを行うことを意味する.イーサネットブリッジは,ソフトウェア・スイッチの一種と考えることができる.一台のマシンで同じIPサブネットを共有できるように,複数の(物理もしくは仮想の)イーサネットインタフェースをくっつけることができる.

離れた場所にある物理イーサネットNICとOpenVPN駆動のTAPインタフェースをブリッジングすることにより,あたかも同じイーサネットのサブネットに入っているかのように,論理的に双方を結合させることが可能となる.

ブリッジモードのセットアップ

次の例でOpenVPNサーバ側イーサネットブリッジの構築方法を示そう.複数のクライアントがこのブリッジに接続し,それぞれのTAPインタフェースにはサーバのLANに属するIPアドレスが割り当てられるとする.

クライアントIPアドレスの割り当てには二通りのやり方がある:

この例では一つ目のやり方を採用する.すなわちOpenVPNサーバがLANサブネットの一部のアドレス空間を管理している.ただしこの空間は,(存在している場合)DHCPサーバの管理範囲と別である.なおこの二通りのやり方に対して,より詳細な説明は FAQ 項目 に説明している.

我々の例においては,次のようなブリッジ設定を用いる:

設定bridge-start パラメータ
イーサネットのインタフェースetheth0
ローカルIPアドレスip192.168.8.4
ローカルネットマスクeth_netmask255.255.255.0
ローカルブロードキャストアドレスeth_broadcast192.168.8.255
VPNクライアントのアドレス空間192.168.8.128 -- 192.168.8.254
仮想ブリッジインタフェースbrbr0
仮想TAPインタフェースtaptap0

第一ステップとして,まず HOWTO の"初めてのVPNを起動させテストする"までの節に従って行うこと.次は,LinuxかWindowsかによって以下に示す手順に従うこと.

Linux上のブリッジサーバ

まず,パッケージ bridge-utils がインストールされているを確認しよう.

それから下記のスクリプト bridge-start を修正しよう.パラメータ br, tap, eth, eth_ip, eth_netmask, と eth_broadcast をブリッジしたい物理イーサネットインタフェースに合わせて記入する.注意:ファイアウォールによってインターネットから保護されているプライベートなインタフェースを使用すること.記入に必要な情報は,Linuxの ifconfig コマンドで知ることができる.

ここでスクリプト bridge-start を実行する.このスクリプトは,永久な tap0 インタフェースを作ってアクティブなイーサネットインタフェースとブリッジをする.

次に,OpenVPNサーバ設定ファイル をブリッジを行うよう修正する.

dev tunの行をコメントアウトし,代わりに次の一行を用いる:

dev tap0

serverで始まる行をコメントアウトし,代わりに以下を用いる:

server-bridge 192.168.8.4 255.255.255.0 192.168.8.128 192.168.8.254

新しく作った tap0br0 インタフェースをパケットが自由に流せるように Linux ファイアウォールを設定する.

iptables -A INPUT -i tap0 -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A FORWARD -i br0 -j ACCEPT

OpenVPNブリッジは,次の順に起動・終了させることができる.

ここまででブリッジだけに関する設定は完了した.残っているのは,HOWTO を参照して続けられるであろう.

Windows XPのブリッジサーバ

以下の設定は,ブリッジ側にWindows XP以上が必要である.私が知る限り,Windows 2000はブリッジを作ることができない.でも,クライアントとしてブリッジ・ネットワークに参加することはできる.その時,OpenVPN接続のもう片方は,LinuxまたはWindows XPマシンによってブリッジを作ればよい.

OpenVPNは,Windowsにインストールされた時に,自動的にTAP-Win32アダプタを一つ作る.デフォルトで"ローカルエリア接続2"みたいな名前になっているが,コントロールパネル,ネットワーク接続に行って,"tap-bridge"に改名しておこう.

それから,tap-bridge とイーサネットアダプタをマウスで選択して,右クリックしブリッジ接続を選ぶ.これにより,コントロールパネルに新たな ブリッジアダプタ アイコンが出るはず.

このブリッジアダプタに対して,TCP/IPプロパティを,IP 192.168.8.4,サブネットマスク 255.255.255.0 のように設定しておく.

次に,OpenVPNサーバ設定ファイルを編集してブリッジモードを有効にする.

dev tunの行をコメントアウトし,代わりに以下を用いる:

dev tap
dev-node tap-bridge

serverで始まる行をコメントアウトし,代わりに以下を用いる.

server-bridge 192.168.8.4 255.255.255.0 192.168.8.128 192.168.8.254

XP SP2を使っている場合は,コントロールパネルのファイアウォールを開いて,ブリッジとTAPアダプタに対してフィルタリングを無効にしておく.

ここまででブリッジだけに関する設定は完了した.残っているのは,HOWTO を参照して続けられるであろう.

ブリッジクライアントの設定

サンプルOpenVPNクライアント設定ファイルをベースにし,dev tunの行をコメントアウトし,代わりに以下を用いるとよい.

dev tap

最後に,クライアントの設定はサーバの設定との整合性を確認しよう.特に proto(udpかtcpか)をチェックすること.また,comp-lzofragmentは,使っているなら,クライアントとサーバの両方に出ていることも確認しよう.

イーサネットブリッジングに関する注

イーサネットブリッジを設定する際に一番最初にやることは,イーサネットブリッジを作ること -- つまり,他のイーサネットインタフェース,物理NICのような実在のものやTAPインタフェースのような仮想のものを収納する仮想ネットワークインタフェースのこと.イーサネットブリッジインタフェースは,OpenVPNの起動前に設定しておかなければならない.

イーサネットブリッジインタフェースを作る汎用的なやり方はない -- 各OSはそれぞれ自分のやり方をしている(下の例を参照).

一旦ブリッジインタフェースが作られ,さらに適切なイーサネットインタフェースも追加されたら,OpenVPNは起動可能となる.

注 -- Windowsにおけるイーサネットブリッジング

Adam PavelecによるこのHOWTOをチェックする.

Windows Notesページはその他の情報を示している.

注 -- Linuxにおけるイーサネットブリッジングとセットアップスクリプト

以下のスクリプトがLinux上でブリッジを起動・停止させるものである.因みにOpenVPNパッケージ(tarballファイル)のsample-scriptsサブディレクトリーの下にもある.


sample-scripts/bridge-start

#!/bin/bash

###########################################
# Linux上でイーサネットブリッジを起動させる
# 依存性: bridge-utils
###########################################

# ブリッジインタフェース
br="br0"

# ブリッジしたいTAPインタフェースのリスト
# 例えば tap="tap0 tap1 tap2"
tap="tap0"

# 上記のTAPインタフェースとブリッジしたい物理イーサネットインタフェース
eth="eth0"
eth_ip="192.168.8.4"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.8.255"

for t in $tap; do
    openvpn --mktun --dev $t
done

brctl addbr $br
brctl addif $br $eth

for t in $tap; do
    brctl addif $br $t
done

for t in $tap; do
    ifconfig $t 0.0.0.0 promisc up
done

ifconfig $eth 0.0.0.0 promisc up

ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast

sample-scripts/bridge-stop

#!/bin/bash

#######################################
# Linuxのイーサネットブリッジを解体する
#######################################

# ブリッジインタフェース
br="br0"

# ブリッジに入っているTAPインタフェースのリスト
tap="tap0"

ifconfig $br down
brctl delbr $br

for t in $tap; do
    openvpn --rmtun --dev $t
done