こんばんは、cloudpack の 夜のonprepack津村です。
最近すっかり寒くなりましたが、自宅から電気食いの機器を廃止したら急遽暖房の出番が……。
将来結婚した暁には、愛情的にも、排熱的にも暖かい家庭を築きたいです……(ぉ

SoftEtherVPNハマりどころ2選

さて、今回はAWSではなく、自宅インフラの話です。
最近自宅サーバを整理し、常時起動の自宅サーバをConoHaへ移設しました。
そして、IX2015とSoftEtherVPNを組み合わせ、EtherIPを使用しL2トンネル・VPNを構築しています。
最終的には「ネットに繋がれば即自宅環境」を目指します。(どや

今のネットワーク環境

SoftEther VPNのハマりどころ: 想定するネットワーク構成図
ポイントとしては、

  • オンプレミス・VPNサーバ(ConoHa上)・L2TP/IPSecで同一のセグメントを使用
  • IX2015とSoftEtherVPNでEtherIPを構成
  • IX2015でWAN冗長構成

といった所でしょう。

問題1:SoftEtherのブリッジ接続はSDNと相性が悪い(事がある)

ConoHaのSDN(OpenStackベースの何か)に対し、仮想ネットワーク・NICをブリッジする所までは良かったのですが、とりあえず動くものの打ったpingのリザルトが2つ帰ってくる等の症状が観られました。

64 bytes from 172.16.0.230: icmp_req=1 ttl=64 time=5.25 ms
64 bytes from 172.16.0.230: icmp_req=1 ttl=64 time=5.25 ms(DUP!)
64 bytes from 172.16.0.230: icmp_req=2 ttl=64 time=5.42 ms
64 bytes from 172.16.0.230: icmp_req=2 ttl=64 time=5.42 ms(DUP!)

結論として、仮想HUBのブリッジをtapインターフェースとして作成し、ブリッジインターフェースで束ねた事で解決しました。
この為に、何度もWireSharkでインターフェースのパケットを解析しました。。。

問題2:ARPエントリが消失する。

前から「おっかしーなー」と思いながら早1ヶ月運用してたのですが、ICMPは問題なくとも、TCPが突如セッションが途切れます。
具体的なプロトコルとしては、SSH及びtelnetになります。
しかしEtherIPもSoftEtherVPNもLayer2VPNを扱う実装です。
ですので、パケット解析を諦め、試しにarpコマンドの結果を1秒毎にポーリングしたところ、MACアドレスの消失が確認されました。

Address                  HWtype  HWaddress           Flags Mask            Iface
172.16.0.1               ether   00:xx:b9:xx:02:xx   C                     br1
cat2950.ntk              ether    (incomplete)       C                     br1
172.16.0.2               ether   40:xx:8f:xx:ba:xx   C                     br1
172.16.0.3               ether   10:xx:e9:xx:a1:xx   C                     br1

ここでは、「cat2950.ntk」のMACアドレスが消失していますが、この後再び復活します。

結果として、ARP(Layer2)のブロードキャストパケットを、ルータおよびLinuxホストでリレーしてあげる必要があります。
ここでは、ProxyARPを本体の内側の仮想NIC(eth1)、およびIX2015のBVI1に対して有効にしました。
(※ブリッジインターフェースではProxyARPは有効になりませんでした…。)

# cat /etc/sysctl.conf
(snip)
net.ipv4.conf.eth1.proxy_arp = 1

# sysctl -p
interface BVI1
  ip address 172.16.0.1/24
  ip proxy-arp
  bridge-group 1
  no shutdown
!

おわりに

しれっと書いてますが、ワケあって回線を2本契約できているので、勿体無いのでWAN冗長をしています。
具体的には「フレッツ光+NTT-PC系ISP」と「JCOM」が引き込まれており、それぞれVLANを切ってL2スイッチで収容しています。
冗長の仕組みはとても簡単で、デフォルトゲートウェイを記述する際にメトリック値を変えて回線の優先順位を付けます。

これにより、回線障害時には以下の挙動を示します。

  • メトリック1(フレッツ)のルートが消失
  • →次のメトリックのルート(JCOM)を使用

→GlobalIPが変わるので、EterIPのセッション再確立。

これらの処理を、わずか2秒で行うあたり、凄いと思いました。まる。

元記事はこちらです。
SoftEtherのハマりどころ、公開します。