CentOS 6ベースのマシンは両方のオフィスで外部ルーターとして機能したため、OpenVPNを使用して内部トラフィックを通過させることが決定されました。 ソリューションのスケーラビリティが低いため、各VLANに個別のトンネルという最初のアイデアはすぐに放棄されました。
Open vSwitchプロジェクトが助けになりました-VLANをサポートするソフトウェアスイッチ(IEEE 802.1q)。

仮想ネットワーク図。
OpenVPNトンネル構成
ネットワークおよびHabréでのOpenVPNのセットアップに関する情報はたくさんありますので、すぐにコメントを付けて構成を説明します。
OpenVPNサーバーの構成
ローカルWXYZ
開発者タップ
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
キー/etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
キープアライブ10 60
ping-timer-rem
持続する
永続キー
デーモン
ユーザーなし
グループなし
/etc/openvpn/bridge.sh
開発者タップ
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
キー/etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
キープアライブ10 60
ping-timer-rem
持続する
永続キー
デーモン
ユーザーなし
グループなし
/etc/openvpn/bridge.sh
OpenVPNクライアントの構成
クライアント
開発者タップ
リモートWXYZ
ノバインド
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client.crt
キー/etc/openvpn/keys/client.key
tls-auth /etc/openvpn/keys/ta.key 1
キープアライブ10 60
ping-timer-rem
持続する
永続キー
デーモン
無限の解決と再試行
ユーザーなし
グループなし
/etc/openvpn/bridge.sh
開発者タップ
リモートWXYZ
ノバインド
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client.crt
キー/etc/openvpn/keys/client.key
tls-auth /etc/openvpn/keys/ta.key 1
キープアライブ10 60
ping-timer-rem
持続する
永続キー
デーモン
無限の解決と再試行
ユーザーなし
グループなし
/etc/openvpn/bridge.sh
スクリプトbridge.sh
#!/ bin / bash
/ usr / bin / ovs-vsctl del-port ovs0 $ 1
/ usr / bin / ovs-vsctl add-port ovs0 $ 1 trunks = 1996,1997,1998,1999
/ sbin / ip link set $ 1 up
/ usr / bin / ovs-vsctl del-port ovs0 $ 1
/ usr / bin / ovs-vsctl add-port ovs0 $ 1 trunks = 1996,1997,1998,1999
/ sbin / ip link set $ 1 up
タップデバイスは、イーサネットフレームを送信するために使用されます。
bridge.shスクリプトは、ネットワークタップデバイスを仮想スイッチ(ovs)に追加するために使用されます。 OpenVPNデーモンを再起動する場合、タップデバイスを出力してスイッチに再追加する必要があります。この松葉杖がないと、仮想スイッチからのトラフィックは到達しません。 この問題はまだきれいに解決されていません。
推測するのは難しくありません。tunksパラメーターは、指定されたVLANのタグ付きトラフィックを送信する仮想ポートの能力を表します。
Open vSwitchを構成する
最近のほとんどのディストリビューションでは、open vSwitchはすでに完全に存在しています。 CentOS 6にはカーネルモジュールのみがあります。 サードパーティのリポジトリで仮想スイッチデーモンを含むパッケージを探すか、自分でパッケージを収集する必要があります。 ネットワーク上でのパッケージの組み立てに関する十分な情報がありますが、このプロセスで問題が生じることはありません。 デーモンをインストールして起動したら、仮想スイッチデバイスを作成する必要があります。 これを行うために、ifcfg-ovs0インターフェース構成ファイルが作成されます。
DEVICE=ovs0 ONBOOT=yes DEVICETYPE=ovs TYPE=OVSBridge BOOTPROTO=static HOTPLUG=no
チームに対応
ovs-vsctl add-br ovs0
インターフェース設定
仮想スイッチポートの構成は、通常のシステムネットワークインターフェイスの設定と実質的に変わりません。 スイッチにインターフェースを追加するために、ifcfg-eth0.197インターフェース構成ファイルが作成されます。
PHYSDEVICE=eth0 DEVICE=eth0.197 ONBOOT=yes DEVICETYPE=ovs TYPE=OVSPort OVS_BRIDGE=ovs0 OVS_OPTIONS="tag=197" BOOTPROTO=none HOTPLUG=no
これはコマンドに対応しています:
ovs-vsctl add-port ovs0 eth0.197
インターフェイスを仮想スイッチに追加すると、このインターフェイスのIPアドレスにアクセスできなくなることに注意してください。 必要に応じて、北部では、このVLANインターフェイスでIPアドレスを使用します。IPアドレスをスイッチの仮想内部ポートに転送する必要があります。 この場合のifcfg-vi197構成ファイルは次のようになります。
DEVICE=vi197 ONBOOT=no DEVICETYPE=ovs TYPE=OVSIntPort BOOTPROTO=static IPADDR=10.0.120.253 NETMASK=255.255.255.0 OVS_BRIDGE=ovs0 OVS_OPTIONS="tag=197" HOTPLUG=no ARPCHECK=no
これはコマンドに対応しています:
ovs-vsctl add-port ovs0 vi197 tag=197 -- set Interface vi197 type=internal
同様に、残りのVLANインターフェイスが作成されます。
次のコマンドを使用して、仮想スイッチポートの現在のステータスを表示できます。
ovs-vsctl show
私の場合、構成は次のとおりです。
非表示のテキスト
Bridge "ovs0" Port "eth0.198" tag: 198 Interface "eth0.198" Port "eth0.197" tag: 197 Interface "eth0.197" Port "vi198" tag: 198 Interface "vi198" type: internal Port "eth0.199" tag: 199 Interface "eth0.199" Port "ovs0" Interface "ovs0" type: internal Port "tap0" trunks: [1996, 1997, 1998, 1999] Interface "tap0" ovs_version: "2.3.0"
おわりに
その結果、インターネット上の暗号化されたチャネルを介してタグ付きトラフィックが通過します。
ソリューションは簡単にスケーラブルであることが判明しました。新しいVLANと新しいリモートネットワークの両方を簡単に追加できます。
PS:OpenVPNの代わりに、open vSwitchに組み込まれたGREトンネルを使用できます。 まだそれを理解する時間はなく、それを使用するときにトラフィックを暗号化する可能性についてはわかりません。