{"id":1965,"date":"2009-06-22T23:47:37","date_gmt":"2009-06-22T21:47:37","guid":{"rendered":"http:\/\/security-planet.de\/?p=1965"},"modified":"2009-06-22T23:47:37","modified_gmt":"2009-06-22T21:47:37","slug":"per-tunnel-ins-ipv6-internet","status":"publish","type":"post","link":"https:\/\/cyber-fi.net\/index.php\/2009\/06\/22\/per-tunnel-ins-ipv6-internet\/","title":{"rendered":"Per Tunnel ins IPv6-Internet"},"content":{"rendered":"<p>Da bei vielen DSL-Anbietern IPv6 ein Fremdwort ist, muss man sich oft mit einem Tunnel behelfen. Die Erweiterung einer IOS-Umgebung (Router und Switch) um IPv6 ist zwar nicht sehr aufwendig, umfasst aber doch etliche Schritte, die ich hier beispielhaft  zusammenfasse.<br \/>\nDabei gehe ich von der folgenden Umgebung aus:<br \/>\n<figure id=\"attachment_1976\" aria-describedby=\"caption-attachment-1976\" style=\"width: 585px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2009\/06\/network.png\" alt=\"Beispiel-Netzwerk\" title=\"Sample-Network\" width=\"585\" height=\"218\" class=\"size-full wp-image-1976\" srcset=\"https:\/\/cyber-fi.net\/wp-content\/uploads\/2009\/06\/network.png 585w, https:\/\/cyber-fi.net\/wp-content\/uploads\/2009\/06\/network-300x112.png 300w\" sizes=\"auto, (max-width: 585px) 100vw, 585px\" \/><figcaption id=\"caption-attachment-1976\" class=\"wp-caption-text\">Beispiel-Netzwerk<\/figcaption><\/figure><\/p>\n<p><strong>Die notwendigen Schritte:<\/strong><\/p>\n<ol>\n<li>Registrieren eines IPv6-Tunnels bei einem Tunnel-Broker:<\/li>\n<p>Sehr leicht hat man die Einrichtung bei dem (kostenlosen) Anbieter Hurricane Electric: <a href=\"http:\/\/tunnelbroker.net\/\">http:\/\/tunnelbroker.net\/<\/a><br \/>\nDort muss man sich registrieren und bekommt seine Zugangsdaten per Mail zugesendet. Nachdem man sich angemeldet hat, kann man einen neuen Tunnel konfigurieren:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2009\/06\/tunnelbroker-1.png\" alt=\"tunnelbroker-1\" title=\"tunnelbroker-1\" width=\"190\" height=\"95\" class=\"alignnone size-full wp-image-1983\" \/><br \/>\nIn dem dann folgenden Dialog wird die eigene IPv4-Adresse eingetragen. Weiterhin wird angegeben, wo der Tunnel im Internet terminiert werden soll. In Deutschland bietet sich evtl. Frankfurt an.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2009\/06\/tunnelbroker-2.png\" alt=\"tunnelbroker-2\" title=\"tunnelbroker-2\" width=\"494\" height=\"534\" class=\"alignnone size-full wp-image-1993\" srcset=\"https:\/\/cyber-fi.net\/wp-content\/uploads\/2009\/06\/tunnelbroker-2.png 494w, https:\/\/cyber-fi.net\/wp-content\/uploads\/2009\/06\/tunnelbroker-2-278x300.png 278w\" sizes=\"auto, (max-width: 494px) 100vw, 494px\" \/><br \/>\nUm den Tunnel einrichten zu k\u00f6nnen, muss der Router, \u00fcber den man sich ins Internet verbindet, anpingbar sein! Wenn das gew\u00e4hrleistet ist, kann der Dialog mit &#8220;Submit&#8221; abgeschlossen werden.<br \/>\nIn der dann folgenden Best\u00e4tigung w\u00e4hlt man die &#8220;Tunnel Details&#8221; aus, wo man sich noch Beispielkonfigurationen f\u00fcr verschiedene Systeme ausgeben lassen kann. Standardm\u00e4\u00dfig bekommt man ein \/64er Netz. Wenn man hinter dem Router noch mehr Infrastruktur hat (wie in diesem Beispiel), muss man noch das &#8220;Routed \/48&#8221; aktivieren:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2009\/06\/tunnelbroker3.png\" alt=\"Tunnelbroker3\" title=\"Tunnelbroker3\" width=\"642\" height=\"82\" class=\"alignnone size-full wp-image-2033\" srcset=\"https:\/\/cyber-fi.net\/wp-content\/uploads\/2009\/06\/tunnelbroker3.png 642w, https:\/\/cyber-fi.net\/wp-content\/uploads\/2009\/06\/tunnelbroker3-300x38.png 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><\/p>\n<li>Tunnelkonfiguration auf dem IOS-Router<\/li>\n<p>Die grunds\u00e4tzliche Router-Konfiguration ist recht simpel und kann als Vorlage von der obigen Webseite generiert werden:<\/p>\n<pre class=\"code\"><code>\ninterface Tunnel0\n description Hurricane Electric IPv6 Tunnel Broker\n no ip address\n ipv6 address [die zugewiesene \/64-Adresse ]\n ipv6 enable\n tunnel source Dialer0        !!! &lt;&lt;----- \n tunnel destination [Der ausgew\u00e4hlte Tunnelserver]\n tunnel mode ipv6ip\nend\n!\nipv6 route ::\/0 Tunnel0\n<\/code><\/pre>\n<p>Abweichend von der vorgeschlagenen Konfiguration habe ich die &#8220;tunnel source&#8221; auf das verwendete Dialer-Interface ge\u00e4ndert. Damit ist die Konfig unabh\u00e4ngig von der konfigurierten oder dynamisch empfangenen IP-Adresse.<\/p>\n<p>IPv6 muss auch noch global eingeschaltet werden:<\/p>\n<pre class=\"code\"><code>\nipv6 unicast-routing\nipv6 cef\n<\/code><\/pre>\n<p>Die Access-Liste auf dem Public-Interface (Dialer0 bei mir) muss wie oben beschrieben anpingbar sein. Das l\u00e4sst sich auch auf die richtige Source-IP (66.220.2.74) eingrenzen. Weiterhin muss das <a href=\"http:\/\/de.wikipedia.org\/wiki\/Ipv6#Tunnelmechanismen\">IP-Protokoll 41 f\u00fcr den Tunnel<\/a> erlaubt sein:<\/p>\n<pre class=\"code\"><code>\ngw#sh ip access-lists interface Dialer 0 | i 41|icmp\n    40 permit icmp any any echo (12 matches)\n    50 permit 41 any any (3252 matches)\n<\/code><\/pre>\n<li>Anpassungen bei der Verwendung dynamischer IP-Adressen<\/li>\n<p>Wenn man eine dynamsiche IP-Adresse hat, dann muss der Tunnel f\u00fcr jede neue IP neu registriert werden. Sehr einfach geht das mit einem EEM-Script von der <a href=\"http:\/\/forums.cisco.com\/eforum\/servlet\/EEM?page=main\">Cisco EEM Scripting Community<\/a> (danke an meinen Blogger-Kollegen <a href=\"http:\/\/blog.quux.de\/\">Jens Link<\/a> f\u00fcr den Tip):<\/p>\n<blockquote><p><a href=\"http:\/\/forums.cisco.com\/eforum\/servlet\/EEM?page=eem&amp;fn=script&amp;scriptId=1885\">ipv6-tunnel-update<\/a><\/p><\/blockquote>\n<p>Dieses Script wird heruntergeladen und muss um die eigenen Tunnel-Parameter erg\u00e4nzt werden:<\/p>\n<pre class=\"code\"><code>set user    \"USER_ID\"\nset md5pass \"MD5-PASSWORD\"\nset tid     \"TUNNEL-ID\"\n<\/code><\/pre>\n<p>Die User-ID ist nicht der Login sondern die Zeichenkette, die nach dem Login auf der Tunnelbroker.net-Seite zu sehen ist (32 Stellen).<br \/>\nDie Tunnel-ID ist die &#8220;Global Tunnel ID&#8221; aus den Tunnel-Details der Tunnelbroker.net-Seite.<br \/>\nDas MD5-Password ist das eigene Password, das mit MD5 gehashed wird. Auf dem Mac kann daf\u00fcr das Programm &#8220;md5&#8221; verwendet werden, jedes andere anst\u00e4ndige Betriebssystem bringt sicher ein entsprechendes Tool mit:<\/p>\n<pre class=\"code\"><code>karstens-macbook-pro:~ karsten$ md5 -s \"Mein Password\"\nMD5 (\"Mein Password\") = 4d3b73493102972e8b989fa5b563b150\nkarstens-macbook-pro:~ karsten$ \n<\/code><\/pre>\n<p>Dieses Script wird ins Flash des Routers geladen und muss f\u00fcr den Embedded Event-Manager (EEM) aktiviert werden:<\/p>\n<pre class=\"code\"><code>event manager directory user policy \"flash:\/\"\nevent manager policy ipv6-tunnel-update.tcl type user\n<\/code><\/pre>\n<p>Der erste Befehl gibt an, wo die Scripte liegen, der zweite meldet das gerade hochgeladene Script im System an.<br \/>\nAls N\u00e4chstes steuert man, wann man die Aktualisierung der IP vornehmen m\u00f6chte. Daf\u00fcr habe ich das Script so modifiziert, dass es die Syslog-Ausgaben \u00fcberwacht und immer dann aktiv wird, wenn der Dialer an das Ausgangs-Interface gebunden wird (ich habe nur einen Dialer im System, daher kann ich das recht einfach halten):<\/p>\n<pre class=\"code\"><code>::cisco::eem::event_register_syslog pattern \"%DIALER-6-BIND\" priority all\nnamespace import ::cisco::eem::*\nnamespace import ::cisco::lib::*\n\nset url     \"http:\/\/ipv4.tunnelbroker.net\"\nset php     \"ipv4_end.php\"\nset ip      \"ipv4b=AUTO\"\nset user    \"USER\"\nset md5pass \"PASS\"\nset tid     \"TUNNEL-ID\"\n\nappend url \"\/$php?$ip&amp;pass=$md5pass&amp;user_id=$user&amp;tunnel_id=$tid\"\n\nafter 5000\n\nif {[catch {http::geturl $url -queryblocksize 50 -type \"text\/plain\" } token]} {\n  action_syslog priority info msg \"http request failed\"\n} else {\n  action_syslog priority info msg \"Response: [http::data $token]\"\n}\n\nexit 0\n<\/code><\/pre>\n<p>Damit wird die neue IP-Adresse auch bei einem Router-Neustart registriert, was das Original-Script nicht macht.<\/p>\n<li>Konfigurieren der Firewall<\/li>\n<p>Nat\u00fcrlich wird man auch f\u00fcr IPv6 eine Firewall aktivieren. Hier offenbart sich dann leider das Grauen bei Cisco. Zum einen unterst\u00fctzt die Zone-Based-Firewall kein IPv6, und auch die traditionelle IOS-Firewall (CBAC) unterst\u00fctzt nur TCP, UDP, ICMP und FTP. Keine weiteren Protokolle und auch keine Erweiterungen, wie das Inspizieren von Router-eigenem Traffic.<br \/>\nAls erstes wird die FW-Policy angelegt und im Tunnel aktiviert:<\/p>\n<pre class=\"code\"><code>ipv6 inspect name FW tcp\nipv6 inspect name FW udp\nipv6 inspect name FW icmp\nipv6 inspect name FW ftp\n!\ninterface Tunnel0\n ipv6 inspect FW out\n<\/code><\/pre>\n<p>Als N\u00e4chstes muss der eingehende Traffic gefiltert werden. Dabei muss man aufpassen, kein einfaches &#8220;deny ipv6 any any&#8221; zu konfigurieren, da dann das Neighbor-Discovery nicht mehr funktioniert. So k\u00f6nnte es aber aussehen:<\/p>\n<pre class=\"code\"><code>ipv6 access-list OUTSIDE-IN-v6\n permit icmp any any nd-na\n permit icmp any any nd-ns\n deny ipv6 any any\n!\ninterface Tunnel0\n ipv6 traffic-filter OUTSIDE-IN-v6 in\n<\/code><\/pre>\n<li>Konfigurieren der weiteren Router-Interfaces<\/li>\n<p>Aus dem zugewiesenen \/48er Netz wird jedem Netz ein Subnet zugewiesen. Welche Subnet-Adressen man nehmen k\u00f6nnte, habe ich <a href=\"http:\/\/security-planet.de\/2008\/07\/29\/ipx-hat-gewonnen\/\">hier<\/a> schon mal angedeutet. Da alle diese Netze die ersten 48 Bit gemeinsam haben, kann man sich die Konfiguration mit Hilfe der &#8220;General-Prefixes&#8221; erleichtern. Diese haben einen Namen (hier HE1) und beinhalten die ersten 48 Bit der IP-Adresse.<\/p>\n<pre class=\"code\"><code>ipv6 general-prefix HE1 2001:aaaa:bbbb::\/48\n<\/code><\/pre>\n<p>Auf den Interfaces kann bei der Konfiguration der IP-Adressen dieser Prefix referenziert werden:<\/p>\n<pre class=\"code\"><code>interface Vlan250\n ipv6 address HE1 ::250:0:0:0:1\/64\n ipv6 enable\n<\/code><\/pre>\n<p>Mit dieser Konfig k\u00fcndigt sich der Router automatisch an, und der PC sollte sich mit einer IPv6-Adresse selbst konfigurieren. Die Funktion kann per Ping (&#8220;ping6 ipv6.google.com&#8221;) oder per Webbrowser (&#8220;http:\/\/ip6.me&#8221;) \u00fcberpr\u00fcft werden.<\/p>\n<li>Einbinden des internen Switches<\/li>\n<p>Um auf dem verwendeten Cisco Catalyst 3560 IPv6 konfigurieren zu k\u00f6nnen, muss der Switch erst vorbereitet werden. Das Default-&#8220;Switch Database Management-Template&#8221; unterst\u00fctzt kein IPv6:<\/p>\n<pre class=\"code\"><code>\nc3560(config)#sdm prefer dual-ipv4-and-ipv6 default <\/code><\/pre>\n<p>Je nachdem, was man mit seinem Catalyst alles machen m\u00f6chte, ist evtl. auch ein anderes Template n\u00f6tig. Diese sind im <a href=\"http:\/\/www.cisco.com\/en\/US\/docs\/switches\/lan\/catalyst3560\/software\/release\/12.2_50_se\/configuration\/guide\/swsdm.html\">Configuration-Guide<\/a> beschrieben. Dieser Befehl taucht sp\u00e4ter nicht in der Konfiguration auf, kann aber mit &#8220;sh sdm prefer&#8221; kontrolliert werden.<\/p>\n<p>Der Rest der Konfiguration ist dann dem Router sehr \u00e4hnlich. IPv6 aktivieren, General-Prefix konfigurieren und Interfaces mit einer IPv6-Adresse versehen:<\/p>\n<pre class=\"code\"><code>\nipv6 general-prefix HE1 2001:aaaa:bbbb::\/48\nipv6 unicast-routing\n!\ninterface Vlan250\n ipv6 address HE1 ::250:0:0:0:2\/64\n!\ninterface Vlan255\n ipv6 address HE1 ::255:0:0:0:1\/64\n<\/code><\/pre>\n<p>Der Router muss jetzt nat\u00fcrlich noch die internen Netze lernen und der Switch eine Default-Route bekommen. In einem kleinen Netz reichen daf\u00fcr ohne weiteres statische Routen, die mit &#8220;ipv6 route&#8221; anstelle &#8220;ip route&#8221; konfiguriert werden. Bei Bedarf kann man nat\u00fcrlich auch RIP, OSPF, EIGRP oder IS-IS benutzen.\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Da bei vielen DSL-Anbietern IPv6 ein Fremdwort ist, muss man sich oft mit einem Tunnel behelfen. Die Erweiterung einer IOS-Umgebung (Router und Switch) um IPv6 ist zwar nicht sehr aufwendig, umfasst aber doch etliche Schritte, die ich hier beispielhaft zusammenfasse. Dabei gehe ich von der folgenden Umgebung aus: Die notwendigen Schritte: Registrieren eines IPv6-Tunnels bei <\/p>\n<div class=\"read-more-text\"><a href=\"https:\/\/cyber-fi.net\/index.php\/2009\/06\/22\/per-tunnel-ins-ipv6-internet\/\" 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,14],"tags":[289,318,358,616],"class_list":["post-1965","post","type-post","status-publish","format-standard","hentry","category-cisco","category-networking","tag-hurricane-electric","tag-ipv6","tag-konfiguration","tag-tunnelbroker"],"_links":{"self":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts\/1965","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=1965"}],"version-history":[{"count":0,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts\/1965\/revisions"}],"wp:attachment":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/media?parent=1965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/categories?post=1965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/tags?post=1965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}