Twitterを確認していたところ、気になったTweetがあったのでご紹介。
RouterOSの機能の特徴の一つに、Fasttrackと呼ばれる機能があります。これはRouterOS 6.29から実装されました。
こちらの機能については簡単に言うと、Linux kernelでの処理をBypass転送することで、CPU負荷を減少させ、また副産物としてスループットの向上が挙げられます。
前説
こちらについてはwikiの以下の項目を参照してください。
有効前 | 有効後 |
360Mbps | 890Mbps |
CPU使用率 100% | CPU使用率 86% |
上記のうちFirewallが44%消費 | 上記のうちFirewallが6%消費 |
劇的な性能改善が見込めるものの、いくつか制約があります。
サポートハードウェアは以下のもののみ。
RB6xx series | ether1,2 |
RB7xx series | all ports |
RB800 | ether1,2 |
RB9xx series | all ports |
RB1000 | all ports |
RB1100, RB1000AHx2 | ether1-11 |
RB1000AHx2 | all ports |
RB2011 series | all ports |
RB3011 series | all ports |
RB4011 series | all ports |
CRS series routers | all ports except management interface (if the device has one) |
CCR series routers | all ports except management interface (if the device has one) |
All devices | wireless interfaces, if wireless-fp, wireless-cm2, wireless-rep or wireless (starting from 6.37) package used |
また機能的にはいくつかの機能がFasttrackよりも遅い(内部)経路を通過するときがあります。
FastTracked packets bypass firewall, connection tracking, simple queues, queue tree with parent=global,
https://wiki.mikrotik.com/wiki/Manual:IP/Fasttrack#Descriptionip traffic-flow(restriction removed in 6.33), IP accounting, IPSec, hotspot universal client, VRF assignment, so it is up to administrator to make sure FastTrack does not interfere with other configuration;
最近ではMikrotikの開発も頑張っており、いくつか改善してきますが、特に用途の多いものと思われるIPsecについてはFasttrackの恩恵を受けることがまだ出来ないでいます。(しかし2017頃からのいくつかの製品については、CPU側でのハードウェアオフロードが実装されてきており、CPU負荷の低減は図られてきています)
本題
しかし、フィルタでのパケット判定をうまく使用することでIPsec接続において、Fasttrackへパケット処理を流すということを出来るようです。
具体的には以下のWebサイト。
設定例
具体的には以下のコマンドを設定し、入出力のipsecを”ipsec”としてmark-connectionします。
/ip firewall mangle add action=mark-connection chain=forward \ comment="mark ipsec connections" ipsec-policy=out,ipsec \ new-connection-mark=ipsec /ip firewall mangle add action=mark-connection chain=forward \ comment="mark ipsec connections" ipsec-policy=in,ipsec \ new-connection-mark=ipsec
次に上記でmarkするようにしたipsecを避けるようにFasttrackの設定を追加します。このあたりは通常のFasttrackと同じように見えますが、2行目最後のconnection-mark=!ipsec
があるように、ipsecとmarkされたもの以外をFasttrack接続に投入するようにします。
/ip firewall filter add chain=forward action=fasttrack-connection \ connection-state=established,related connection-mark=!ipsec /ip firewall filter add chain=forward action=accept \ connection-state=established,related
最後にAmazing!と書かれているように、 IPsec site-to-siteトンネルによる通信では驚くような性能改善が出来ているようです。
筆者の手元の環境ではちょっとIPSecなS2S通信の環境を用意できていないので、こちらは追試とさせてください。
最後に
これであるならばある程度でもhEX S(やRB4011)などを使用しても、複数本のIPsecトンネルを張るような事になっても設定前よりは負荷を減らすことが出来る or トンネルの収容増加も可能になるのではないかと思います。
Thanks for the good information, @jozevolf .
参考情報:
NAT and Fasttrack Bypass
At this point if you try to send traffic over the IPsec tunnel, it will not work, packets will be lost. This is because both routers have NAT rules (masquerade) that is changing source address before packet is encrypted. Router is unable to encrypt the packet, because source address do not match address specified in policy configuration. For more information see IPsec packet flow example.
https://wiki.mikrotik.com/wiki/Manual:IP/IPsec#NAT_and_Fasttrack_Bypass
To fix this we need to set up IP/Firewall/NAT bypass rule.