インターネットを介したVLANの転送

私たちの組織のリーダーシップが、メインの企業ネットワーク内の別の都市にオフィスを含めるというタスクを設定したら。 同時に、テレフォニー、データベースへのアクセス、機器管理などのために、企業ネットワーク内でいくつかの仮想ネットワーク(VLAN)が使用されました。 何らかの理由で、これらのVLANを転送するための直接チャネルを借りることはできませんでした。



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
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
スクリプト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


タップデバイスは、イーサネットフレームを送信するために使用されます。



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トンネルを使用できます。 まだそれを理解する時間はなく、それを使用するときにトラフィックを暗号化する可能性についてはわかりません。



All Articles