OpenVPN ブリッジ

提供: ArchWiki
2023年3月20日 (月) 16:39時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎Static Bridge Troubleshooting: 飜訳)
ナビゲーションに移動 検索に移動

このページでは Arch Linux でネットワークブリッジを作成し、IP layer-3 ベースの IP トンネル (TUN) ではなく、IP layer-2 ベースの Ethernet ブリッジ (TAP) を使って OpenVPN サーバをホストする方法を説明します。一般的な OpenVPN ページでは、PAM 認証や OpenSSL セキュリティ証明書の設定についてより詳しく説明しています。

イントロダクション

OpenVPN のドキュメントページでは、OpenVPN がサポートするサーバーサイドとクライアントサイドのオプションの完全な概要が提供されています。トンネリングモードで OpenVPN を設定し、トラフィックのルーティングを制御する方が簡単であり、目的に合っている場合は一般的にそのようにすることが推奨されます。ただし、Windows のファイル共有などのネットワークアプリケーションは、イーサネットレベルでのネットワークブロードキャストに依存し、同じサブネット上に物理的に配置されていると考えることで利益を得るため、ソフトウェアブリッジングがこの目的に役立ちます。

ブリッジングを設定する方法は複数あります。動的な方法では、OpenVPN がシステム上で独自のブリッジを管理し、それを開始、停止、および設定します。これはブリッジングを設定する最も迅速な方法ですが、OpenVPN の起動および停止時に他のネットワークサービスが中断されます。システムが独自のブリッジを管理する場合、OpenVPN の他にも他の仮想ネットワークアダプタがブリッジに接続するため、静的な方法を使用する方が好ましいです。

動的ブリッジのインストール

OpenVPN と Linux ブリッジングユーティリティをインストールする必要があります。これらは openvpn および bridge-utils パッケージで利用できます。

動的ブリッジ設定

OpenVPN は、設定ファイルで指定された名前の TAP デバイスを自動的に作成/削除します。以下の例の設定ファイルには、TUN または TAP に共通する OpenVPN の設定は示されておらず、TAP モードに影響する設定のみが示されています。スクリプトを作成した後、up および down スクリプトが実行可能であることを chmod +x で確認してください。

(TUN と TAP に共通するセクションは省略)

/etc/openvpn/server.conf
# this uses a dhcp server, server-side
#  clients must support binding their dhcp client to their tap adapter
# do not append 'nogw' if using dhcp
server-bridge
# can specify interface, like tap0 or tap1
#  or use up/down routing scripts to handle
#  more than one, if needed
dev tap0
# needed to call scripts like up/down
#  which call external programs within the scripts
script-security 2
# user defined scripts for adding/removing tap to bridge
#  'dev mtu link_mtu ifconfig_local_ip ifconfig_remote_ip' are appended if set
# make sure 'user' has permission to run 'down' ('up' will be root)
up "up br0 eth0"
down "down br0 eth0"
# call 'down' before TUN/TAP close
down-pre
# drop root priveledges once connected
#  good idea, for servers running on linux
# 'up' script not affected, 'down' script is
;user nobody
;group nobody
/etc/openvpn/up
#!/bin/bash
br=$1
eth=$2
dev=$3
mtu=$4
cd /usr/bin/

# only if you start dhcpcd and leave it
#  running for eth
#dhcpcd -k $eth

# needed if script is run independently
# but when run through openvpn
# openvpn will do this automatically
#  could also use 'ip tuntap ..'
#openvpn --mktun --dev $dev

brctl addbr $br
# set forwarding delay to 0
#  otherwise dhcp called below would timeout
brctl setfd $br 0
brctl addif $br $eth
# order matters here.. right now there is only
#  one mac in the bridge's table
# if there were two.. there is no guarantee
#  which would be passed to the dhcp server
dhcpcd $br
brctl addif $br $dev

ip link set $eth up promisc on mtu $mtu
ip link set $dev up promisc on mtu $mtu
/etc/openvpn/down
#!/bin/bash
br=$1
eth=$2
cd /usr/bin/

dhcpcd -k $br

ip link set $br down
brctl delbr $br

# needed if script is run independently
# but when run through openvpn
# openvpn will do this automatically
#  could also use 'ip tuntap ..'
#openvpn --rmtun --dev $dev

# only if you start dhcpcd and leave it
#  running for eth
#dhcpcd $eth

These examples are for using dhcp. If you are going to use static IP addresses, you will need to adjust accordingly.

Systemd の使用

OpenVPN の systemd スクリプトは、デフォルトで /etc/openvpn フォルダ内の <name>.conf ファイルを探します。したがって、server.conf という名前のファイルがあると仮定すると、openvpn@server を有効化して起動することができます。

同時に dhcpcd が別々に有効化されていることに注意してください(つまり、dhcpcd@eth0.service)。OpenVPN の後に完了して OpenVPN 用の DHCP 設定を台無しにする可能性がありますが、それはあまりありそうもありません。どのみち openvpn@server.service が DHCP をリセットすることがわかっているので、dhcpcd@eth0.service を無効にすることができるでしょう。

警告: 静的ブリッジのセクションでは、systemd を使用した方法がまったく説明されていません。さらに、古い情報が含まれている可能性があります。いずれ見直す必要があります。

静的ブリッジのインストール

まず最初に、openvpnbridge-utilsnetctl のパッケージをインストールしてください。

静的ブリッジの設定

OpenVPN チームやさまざまな Linux パッケージャが提供する OpenVPN の早期バージョンのガイドでは、OpenVPN を起動する際にブリッジを構築し、OpenVPN をシャットダウンする際にブリッジを破壊するためのスクリプトの例が示されていました。

ただし、これはやや時代遅れのアプローチであり、OpenVPN 2.1.1 以降では、セキュリティ上の理由から明示的に有効化されない限り、外部スクリプトやプログラムを呼び出すことができません。

また、ブリッジの構築は、ネットワークの初期化プロセスの他のすべての部分に比べて比較的遅いです(実際、ブリッジが準備できる前に dhcpcd がタイムアウトするほど遅いです。#Static Bridge Troubleshooting を参照してください)。さらに、設定変更後に OpenVPN を再起動する際に、動作しているブリッジを再構築する理由はありませんし、他のすべてのネットワークアプリケーションを中断します。したがって、以下のように静的ブリッジ設定を行うことが推奨されています。

サーバー用の OpenVPN ブリッジを作成するには、netctl を使用して 2 つのネットワークプロファイル(tap インターフェース用とブリッジ用)を作成する必要があります。

/etc/netctl に移動し、tuntap のサンプルファイルをディレクトリにコピーします:

# cd /etc/netctl/
# cp examples/tuntap openvpn_tap

次に、openvpn_tap を編集して tap インターフェイスを作成します。以下のようになるかもしれません:

/etc/netctl/openvpn_tap
Description='tuntap connection'
Interface=tap0
Connection=tuntap
Mode='tap'
User='nobody'
Group='nobody'

ここでは IP アドレスを設定しないでください。これはブリッジインターフェイスで行われる予定です!

bridge プロファイルを作成するには、サンプルファイルをコピーします:

# cp examples/bridge openvpn_bridge

次に、openvpn_bridge を編集します。以下のようになるかもしれません:

/etc/netctl/openvpn_bridge
Description="Bridge connection"
Interface=br0
Connection=bridge
BindsToInterfaces=(eth0 tap0)
IP=static
Address=('192.168.11.1/24')
Gateway='192.168.11.254'
DNS=('192.168.11.254')

詳細情報や、例えば DHCP の使用方法については、netctl の記事を参照してください。

次に、両方のプロファイルを有効化して開始します:

# netctl enable openvpn_tap
# netctl enable openvpn_bridge
# netctl start openvpn_tap
# netctl start openvpn_bridge

スタティックブリッジのトラブルシューティング

ネットワークの開始に失敗しました

これは、ブリッジで DHCP を使用しており、ブリッジの設定に dhcpcd が待機するよりも時間がかかるためです。ブリッジネットワークプロファイル(openvpn_bridge)で FWD_DELAY パラメータを設定することで、これを修正できます。まず 5 の値から始めて、動作するまで減らしていきます。

DHCP を使用している場合にブリッジに IP アドレスがない

イーサネットインターフェースに割り当てられている IP アドレスを解放してから、DHCP 経由で IP をリクエストする必要があるかもしれません。これを行うには:

dhcpcd -k

次に、dhcpcd の設定ファイルを変更して、イーサネットインターフェースに IP アドレスが割り当てられないようにします(この場合、enp3s0):

/etc/dhcpcd.conf
denyinterfaces enp3s0

ファイルの最後の方で(ブリッジの名前が br0 であることを前提に):

/etc/dhcpcd.conf
interface br0

上記で説明したように、ネットワークブリッジを作成し、dhcpcd を実行してインターフェースに IP アドレスを割り当てます。ip addr がブリッジ(つまり br0)に有効な IP アドレスを割り当てていることを確認します。

More Resources

  • OpenVPN - General page on configuring OpenVPN, including setting up authentication methods.