ルータのDHCPサーバ性能

先日、ちょっとYAMAHAのルータを利用していて、DHCPサーバが死ぬということが起きました。

一斉にクライアントから再接続しに行ったところ、接続できなくなり、 確認してみたらDHCPでした、という感じです。

dhcpperfというDHCPの性能を測るツールを公開してくださっているので、 これを機会に調べてみたところです。

YAMAHAのルータ自体は、クリティカルなわけでもない箇所でDHCP/NAT箱として利用しているだけでしたので、 置き換えを検討しながら、いっそ仮想ルータに置き換えてしまっても問題ないのでは? ということで SEIL/x86VyOSDHCP性能も調べてみたところです。

仮想マシンは、AMD A10-7800 Windows10上のVMwareWorkstation上ですので、 もっと性能のいいサーバマシン上ではもう少し出るかもしれません。

結果だけ書いてしまうと

機器 性能 request/sec
RTX 3500 7, 8
SEIL/x86 96
VyOS 113

というところでした。 YAMAHAルータの圧倒的な性能のなさが見せつけられました。 CPU bound な処理だろうから、クロックの低いルータのCPUではつらいという感じでしょうか

計測には dhcpperf -v を用い、何も特殊なことはしていません。

DHCP pool は 172.16.0.0/16 を基準としています ただし、 SEIL/x86は pool の最大が 1021でしたので、 1021で計測しています。 計測中の状況を見るとに、SEIL/x86は clientのreleaseに応じてちゃんと解放しているようでしたので、 ちゃんと計測できているのではないかと思います。 VyOSの場合、clientのreleaseが来ても、どうも1日くらい(?)解放しないようで、poolサイズを小さくすると、 poolが尽きて応答が高速になるという現象に遭遇しました。

とりあえず3種比べてみましたが、手元に転がっているCisco Routerでも調べてみる予定です。

それはそうと、120秒間、100リクエストが来続けるとか、どんな環境でしょうね。 12000台のクライアントが2分の間に接続してくるような環境……

Cisco 機器と IPsec その3

crypto isakmp profile にて match identity address 0.0.0.0を入れてしまうと、 該当外のIPSecもこの設定を利用してしまうため不都合があるので、 aggressive-mode を利用するほうが無難という。

Site2-A, Site2-B 共通

外へ出ていくIFが GigabitEthernet1/0 であるとしている。

crypto keyring <keyring-name>
  pre-shared-key address 0.0.0.0 0.0.0.0 key <shared-pass>

crypto isakmp profile <profile-name>
   keyring <keyring-name>
   match identity user-fqdn <User@FQDN.local>
   virtual-template <template number>

interface Virtual-Template <template number> type tunnel
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile default

router ospf 1

Site2-A, Site2-B 共通

外へ出ていくIFが GigabitEthernet1/0 であるとしている。

crypto isakmp peer address <Site2-A Global IPAddress>
 set aggressive-mode password <shared-pass>
 set aggressive-mode client-endpoint user-fqdn <User@FQDN.local>

crypto isakmp peer address <Site2-B Global IPAddress>
 set aggressive-mode password <shared-pass>
 set aggressive-mode client-endpoint user-fqdn <User@FQDN.local>

interface Tunnel <tunnel number>
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel source GigabitEthernet1/0
 tunnel mode ipsec ipv4
 tunnel destination <Site2-A Global IPAddress>
 tunnel protection ipsec profile default

interface Tunnel <tunnel number>
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel source GigabitEthernet1/0
 tunnel destination <Site2-B Global IPAddress>
 tunnel protection ipsec profile default

router ospf 1

Cisco 機器と IPsec その2

crypto map を利用するやり方だと、冗長化構成が取れないので、 やはり virtual-template を使う方法に。

topology

f:id:paihu:20170604160223p:plain こんな感じ、余分なところを取って綺麗にしました。

設定

全体的に

virtual-template 使うと、 virtual-access というインターフェースが動的に生成されますが、 ここに対してstatic routeを入れる方法が分からなかったので とりあえず OSPF を動かしています。何らかのdynamic routing protocol動かさないと virtual-access インターフェースにトラフィックが向けられないような気がするのでそこがポイントかなと。

Site2側はmatch identity address 0.0.0.0 でどこからでも受けられるようになっているので、 Site3みたいな対向拠点をぽこぽこ増やしたいときもある程度対応できそうですね。

Site3側はSite2-AとSite2-B から同じコストで経路をもらうと、ロードバランスしてくれます。

Site2-A, Site2-B 共通

shared-pass を変えたい場合は変更すると良いかと。

crypto keyring <keyring-name>
  pre-shared-key address 0.0.0.0 0.0.0.0 key <shared-pass>

crypto isakmp profile <profile-name>
   keyring <keyring-name>
   match identity address 0.0.0.0
   virtual-template <template number>

interface Virtual-Template <template number> type tunnel
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile default

router ospf 1

Site3

crypto isakmp key <shared-pass> address <Site2-A Global IPAddress>
crypto isakmp key <shared-pass> address <Site2-B Global IPAddress>

interface Tunnel <tunnel number>
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel source GigabitEthernet1/0
 tunnel mode ipsec ipv4
 tunnel destination <Site2-A Global IPAddress>
 tunnel protection ipsec profile default

interface Tunnel <tunnel number>
 ip unnumbered GigabitEthernet1/0
 ip ospf 1 area 0
 tunnel source GigabitEthernet1/0
 tunnel mode ipsec ipv4
 tunnel destination <Site2-A Global IPAddress>
 tunnel protection ipsec profile default

router ospf 1

その他

シンプルな設定のみということで * crypto isakmp prfile * crypto ipsec prfile * crypto ipsec transform-set あたりはデフォルトのものを使うようにしてます。 本運用するのならちゃんと設定した方が良いかと