{"id":2973,"date":"2010-06-20T20:03:56","date_gmt":"2010-06-20T18:03:56","guid":{"rendered":"http:\/\/security-planet.de\/?p=2973"},"modified":"2010-06-20T20:03:56","modified_gmt":"2010-06-20T18:03:56","slug":"cisco-ios-per-tunnel-qos-fur-dmvpn","status":"publish","type":"post","link":"https:\/\/cyber-fi.net\/index.php\/2010\/06\/20\/cisco-ios-per-tunnel-qos-fur-dmvpn\/","title":{"rendered":"Cisco IOS: Per-Tunnel QoS f\u00fcr DMVPN"},"content":{"rendered":"<p><a href=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2008\/12\/router.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2008\/12\/router.png\" alt=\"\" title=\"router\" width=\"70\" height=\"49\" class=\"alignleft size-full wp-image-643\" \/><\/a><a href=\"http:\/\/www.cisco.com\/go\/dmvpn\">DMVPN<\/a> ist eine der elegantesten VPN-Arten, wenn man eine gr\u00f6\u00dfere Anzahl von Au\u00dfenstellen hat, die \u00fcber das Internet verbunden sind. Leider ist die Konfiguration von Quality of Service (QoS) hierbei leicht eingeschr\u00e4nkt. Vor einiger Zeit habe ich es bei einem ersten Kunden gewagt, <a href=\"http:\/\/www.cisco.com\/en\/US\/docs\/ios\/sec_secure_connectivity\/configuration\/guide\/sec_per_tunnel_qos_ps6441_TSD_Products_Configuration_Guide_Chapter.html\">Per-Tunnel QoS<\/a> zu konfigurieren. Gewagt deshalb, weil ich daf\u00fcr von meinem <a href=\"..\/2008\/12\/06\/welches-cisco-ios-sollte-man-verwenden\/\">Lieblings-IOS, 12.4(15)T<\/a>, auf ein neueres IOS wechseln musste. Im aktuellen Fall hat sich 12.4(22)T5 als stabil und zuverl\u00e4ssig genug herausgestellt. Die vorher getestete Version 12.4(22)T4 hatte massive Speicherlecks und war noch nicht einsetzbar.<\/p>\n<p><strong>Was ist Per-Tunnel-QoS?<\/strong><br \/>\nBeim DMVPN registriert sich der Spoke-Router per NHRP, um seine (dynamische) public IP beim Next-Hop-Server (NHS) zu registrieren. Dabei kann der Router gleich einen Gruppennamen mitgeben, der in der Per-Tunnel-QoS-Konfiguration verwendet wird. Auf dem Hub wird f\u00fcr jede Gruppe eine QoS-Konfiguration angewendet. Damit l\u00e4sst sich z.B. f\u00fcr jeden Spoke-Router die Datenrate auf die in der Au\u00dfenstelle verwendete Downstream-Geschwindigkeit shapen. Wenn in der Hauptstelle eine Internet-Anbindung mit 34 MBit\/s vorhanden ist, w\u00fcrde man damit normalerweise fast jede Au\u00dfenstelle \u00fcberlasten. Mit Per-Tunnel-QoS l\u00e4sst sich das individuell runter regeln und wichtiger Traffic kann auch priorisiert werden.<\/p>\n<p><strong>Die Spoke-Konfiguration<\/strong><br \/>\nDiese beschr\u00e4nkt sich auf eine Zeile in der Konfiguration:<\/p>\n<pre class><code>interface Tunnel1\n  description DMVPN-Tunnel Internet\n  ...\n  ip nhrp group SDSL2000-Std\n  ...\n<\/code><\/pre>\n<p>Der Gruppenname (hier SDSL2000-Std) wird auf der Hub-Seite f\u00fcr die Auswahl der richtigen Policy verwendet. In diesem Beispiel ist die Au\u00dfenstelle mit einer 2 MBit\/s SDSL-Leitung angebunden, in der kein Voice verwendet wird. Die 2 MBit\/s-Au\u00dfenstelle mit Voice benutzt dann z.B. den Gruppennamen SDSL2000-Voice.<\/p>\n<p>Die Gruppen sind auf dem Hub sichtbar:<\/p>\n<pre class><code>HUB-Router#sh ip nhrp \n...\n10.255.255.8\/32 via 10.255.255.8\n   Tunnel1 created 2w5d, expire 01:43:49\n   Type: dynamic, Flags: registered used \n   NBMA address: 79.x.y.z \n   <strong>Group: SDSL2000-Std<\/strong>\n10.255.255.9\/32 via 10.255.255.9\n   Tunnel1 created 20:53:37, expire 01:46:01\n   Type: dynamic, Flags: registered \n   NBMA address: 88.x.y.z \n   <strong>Group: HSDPA-Std<\/strong>\n10.255.255.16\/32 via 10.255.255.16\n   Tunnel1 created 2w5d, expire 01:54:05\n   Type: dynamic, Flags: registered used \n   NBMA address: 80.x.y.z \n   <strong>Group: SDSL2000-Std<\/strong>\n10.255.255.152\/32 via 10.255.255.152\n   Tunnel1 created 2w5d, expire 01:29:46\n   Type: dynamic, Flags: registered \n   NBMA address: 80.x.y.z \n   <strong>Group: ADSL3000-Voice<\/strong>\n...<\/code><\/pre>\n<p><strong>Die Hub-Konfiguration<\/strong><br \/>\nAuf dem Hub wird als Minimum eine Policy f\u00fcr Shaping konfiguriert, die von der NHRP-Gruppe abh\u00e4ngig ist:<\/p>\n<pre class><code>policy-map SDSL2000-Std-Parent\n class class-default\n    shape average 2000000\npolicy-map HSDPA-Std-Parent\n class class-default\n    shape average 3000000\n<\/code><\/pre>\n<p>Diese Policy-Map wird im DMVPN-Tunnel an die Ziel-NHRP-Gruppe gebunden:<\/p>\n<pre class><code>interface Tunnel1\n  description DMVPN-Tunnel Internet\n  ip nhrp map group HSDPA-Std service-policy output HSDPA-Std-Parent\n  ip nhrp map group SDSL2000-Std service-policy output SDSL2000-Std-Parent\n<\/code><\/pre>\n<p>F\u00fcr alle Standorte, die diese NHRP-Gruppen verwenden, wird die ausgehende Datenrate auf zwei, bzw. auf drei MBit\/s begrenzt.<br \/>\nF\u00fcr die Standorte, die auch Voice benutzen, muss innerhalb dieser begrenzten Datenrate aber der Voice-Traffic bevorzugt werden. Daf\u00fcr wird eine hierarchische Policy-Map konfiguriert:<\/p>\n<pre class><code>class-map match-all EF-TRAFFIC\n  match  dscp ef \n!\npolicy-map ADSL3000-Voice\n class EF-TRAFFIC\n    priority 256\n class class-default\n    fair-queue\npolicy-map ADSL3000-Voice-Parent\n class class-default\n    shape average 3000000\n  service-policy ADSL3000-Voice<\/code><\/pre>\n<p>Hier wird in der Parent-Policy der Traffic auf 3 MBit geshaped. In diesen drei MBit\/s wird 256 kBit\/s f\u00fcr Voice-Traffic priorisiert. Auch das weitere gew\u00fcnschte QoS-Verhalten w\u00fcrde in der Child-Policy konfiguriert werden. In dem Tunnel-Interface wird dann auch hier die Parent-Policy an die NHRP-Gruppe gebunden:<\/p>\n<pre class><code> interface Tunnel1\n  ip nhrp map group ADSL3000-Voice service-policy output ADSL3000-Voice-Parent<\/code><\/pre>\n<p>Die Wirkung der QoS-Implementierung kann man dann mit &#8220;show dmvpn detail&#8221; und &#8220;show policy-map multipoint&#8221; \u00fcberpr\u00fcfen:<\/p>\n<pre class><code>HUB-Router#sh dmvpn detail \n...\n    1 80.x.y.z     10.255.255.16    UP 20:38:56    D     10.255.255.16\/32\nNHRP group: SDSL2000-Std\n Output QoS service-policy applied: SDSL2000-Std-Parent\n\n    1  80.x.y.z    10.255.255.152    UP     2w5d    D    10.255.255.152\/32\nNHRP group: ADSL3000-Voice\n Output QoS service-policy applied: ADSL3000-Voice-Parent\n<\/code><\/pre>\n<pre class><code>HUB-Router#sh policy-map multipoint \n\nInterface Tunnel1  80.x.y.z\n\n  Service-policy output: ADSL3000-Voice-Parent\n\n    Class-map: class-default (match-any)\n      3643772 packets, 1136319199 bytes\n      5 minute offered rate 0 bps, drop rate 0 bps\n      Match: any \n      Queueing\n      queue limit 750 packets\n      (queue depth\/total drops\/no-buffer drops) 0\/0\/0\n      (pkts output\/bytes output) 3744389\/1409612078\n      shape (average) cir 3000000, bc 12000, be 12000\n      target shape rate 3000000\n\n      Service-policy : ADSL3000-Voice\n\n        queue stats for all priority classes:\n          Queueing\n          queue limit 64 packets\n          (queue depth\/total drops\/no-buffer drops) 0\/0\/0\n          (pkts output\/bytes output) 1046668\/312237672\n\n        Class-map: EF-TRAFFIC (match-all)\n          1045840 packets, 242902872 bytes\n          5 minute offered rate 0 bps, drop rate 0 bps\n          Match:  dscp ef (46)\n          Priority: 256 kbps, burst bytes 6400, b\/w exceed drops: 0\n          \n\n        Class-map: class-default (match-any)\n          2597932 packets, 893416327 bytes\n          5 minute offered rate 0 bps, drop rate 0 bps\n          Match: any \n          Queueing\n          queue limit 686 packets\n          (queue depth\/total drops\/no-buffer drops\/flowdrops) 0\/0\/0\/0\n          (pkts output\/bytes output) 2697721\/1097374406\n          Fair-queue: per-flow queue limit 171\n...<\/code><\/pre>\n<p><strong>Verbleibende potentielle Probleme:<\/strong><br \/>\nAuch Per-Tunnel QoS l\u00f6st nat\u00fcrlich nicht alle Probleme. Wenn man z.B. mehrere Hubs hat, die Traffic zu den Spokes senden, dann wei\u00df Hub1 nicht, wieviel Traffic Hub2 sendet. Auch haben die Hubs keine Information, ob die Spokes evtl. durch lokalen Internet-Traffic oder aber durch Spoke-to-Spoke-Kommunikation \u00fcberlastet sind. Trotzdem kann die Kommunikation mit diesem Modell in vielen F\u00e4llen optimiert werden.<\/p>\n<p>Zus\u00e4tzlich werden einzelne Pakete durch das Shaping evtl. l\u00e4nger zur\u00fcckgehalten, wodurch sich die Reihenfolge der IPSec-Pakete \u00e4ndern kann. Der Replay-Buffer der Router muss also deutlich vergr\u00f6\u00dfert oder der Replay-Check gar komplett ausgeschaltet werden:<\/p>\n<pre class><code>crypto ipsec security-association replay window-size 1024\nno crypto ipsec security-association replay window-size<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>DMVPN ist eine der elegantesten VPN-Arten, wenn man eine gr\u00f6\u00dfere Anzahl von Au\u00dfenstellen hat, die \u00fcber das Internet verbunden sind. Leider ist die Konfiguration von Quality of Service (QoS) hierbei leicht eingeschr\u00e4nkt. Vor einiger Zeit habe ich es bei einem ersten Kunden gewagt, Per-Tunnel QoS zu konfigurieren. Gewagt deshalb, weil ich daf\u00fcr von meinem Lieblings-IOS, <\/p>\n<div class=\"read-more-text\"><a href=\"https:\/\/cyber-fi.net\/index.php\/2010\/06\/20\/cisco-ios-per-tunnel-qos-fur-dmvpn\/\" class=\"read-more\">continue reading<\/a><\/div>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"twitterCardType":"","cardImageID":0,"cardImage":"","cardTitle":"","cardDesc":"","cardImageAlt":"","cardPlayer":"","cardPlayerWidth":0,"cardPlayerHeight":0,"cardPlayerStream":"","cardPlayerCodec":"","footnotes":""},"categories":[5,6],"tags":[194,307,358],"class_list":["post-2973","post","type-post","status-publish","format-standard","hentry","category-cisco","category-cisco-qos","tag-dmvpn","tag-ios","tag-konfiguration"],"_links":{"self":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts\/2973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/comments?post=2973"}],"version-history":[{"count":0,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts\/2973\/revisions"}],"wp:attachment":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/media?parent=2973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/categories?post=2973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/tags?post=2973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}