Привет всем! Хочу поделиться опытом использования IPv6 на моем роутере R450G. Прошу простить любые технические неточности, так как я относительно нов в Mikrotik и использовании IPv6.
Недавно я зарегистрировал аккаунт на http://www.tunnelbroker.com — сайте, предлагающем бесплатные 6to4 туннели. Сервис предоставляется Hurricane Electric, который заявляет о себе как о крупнейшем провайдере IPv6 трафика. Разумеется, цель бесплатного предложения — привлечь платных клиентов. Но, по крайней мере, это стандартизированный механизм, который не требует каких-то obscure программ типа http://www.sixxs.net. Всего несколько кликов — и у вас рабочий 6to4 туннель со своим собственным /64 или /48 (маршрутизируемым!!!) префиксом IPv6 сети. На сайте также есть несколько базовых команд для настройки 6to4 туннеля на платформе Mikrotik:
Эти команды дадут вам рабочий туннель. Однако вы не сможете использовать его сразу с любого компьютера, подключенного к вашему Mikrotik роутеру. Вместо этого вам нужно будет сначала объявить маршрутизируемый префикс IPv6 сети на ссылке, к которой подключен ваш ПК. Вот код, который поможет:
Теперь вы сможете просматривать часть интернета с поддержкой IPv6. По крайней мере, пока ваш публичный IPv4 адрес не изменится, как это происходит в моем случае из-за принудительного отключения от моего ADSL провайдера. Проблема в том, что обе конечные точки 6to4 туннеля должны знать свой собственный публичный IP-адрес, а также адрес удаленного сайта. Поэтому вам нужно будет обновлять локальную конфигурацию на Mikrotik роутере, а также на удаленном сайте каждый раз, когда ваш публичный IPv4 адрес меняется. К счастью, tunnelbroker.com предлагает API на основе HTTP для уведомления удаленного сайта об изменении вашего публичного IPv4 адреса. Используйте формат:
Где: $IPV4ADDR = Новый IPv4 Endpoint (AUTO для использования IP-адреса запрашивающего клиента) $MD5PASS = MD5 хеш вашего пароля $USERID = User ID с главной страницы tunnelbroker (не ваше имя пользователя) $GTUNID = Глобальный ID туннеля со страницы tunnel_details
Это выглядит просто идеально для автоматизации. Поскольку веб-страница не требует HTTPS, инструмент fetch операционной системы Mikrotik справляется с задачей. Чтобы IPv6 работал после каждого переподключения ADSL, я написал небольшой скрипт, частично основанный на скрипте обновления DynDNS, который я нашел в вики.
# 6in4 туннельный конечный пункт обновления скрипта # для использования с tunnelbroker.com (Hurricane Electric) # от r@n
# Определить переменные пользователя # Изменить на IPv4 интерфейс, который должен использоваться в качестве конечного пункта туннеля :global pubinterface "Alice"
# User ID для tunnelbroker.com (НЕ ИМЯ ПОЛЬЗОВАТЕЛЯ!!!) :global userid "?????????????????"
# Пароль для tunnelbroker.com как MD5 хеш # Обратите внимание: Используйте генератор, который не добавляет перенос строки к вашему паролю! # Этот работает для меня: http://www.miraclesalad.com/webtools/md5.php :global md5passwd "????????????????"
# Глобально уникальный ID для вашего туннеля в платформе tunnelbroker.com :global gtunnelid "?????"
# НЕ ИЗМЕНЯЙТЕ ЭТОТ СКРИПТ НИЖЕ ЭТОЙ СТРОКИ!!!
# Получить текущий IP-адрес на этом интерфейсе. :global pubip [ /ip address get [/ip address find interface=$pubinterface ] address ]
# Обрезать публичный IP (предполагает, что маска подсети больше 9 бит) :local tmp ([:len $pubip] - 3) :set pubip [pick $pubip 0 $tmp]
# Запомнить последний публичный IP (устанавливается в конце этого скрипта, но остается в памяти) :global lastheip :if ([ :typeof $lastheip ] = nil ) do={ :global lastheip "0" }
# Обновить локальный конечный пункт IP-адреса на удаленном сайте :global host "ipv4.tunnelbroker.net" :global url "http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=$pubip&pass=$md5passwd&user_id=$userid&tunnel_id=$gtunnelid"
/tool fetch url=$url host=$host
# Обновить локальный конечный пункт IP-адреса в локальной конфигурации /interface 6to4 set sixbone disabled=yes /interface 6to4 set sixbone disabled=no local-address=[:toip $pubip]
# Объявить IPv6 еще раз :local tmp2 [/ipv6 address find address="2001:470:9909:1:20c:42ff:fe52:941/64"] /ipv6 address set $tmp2 advertise=no /ipv6 address set $tmp2 advertise=yes
:log info "Обновление конечного пункта туннеля завершено. $url"
:set lastheip $pubip } else={ :log info "HE: Обновление туннеля не требуется." }
Собрать этот скрипт заняло у меня около 3 часов, но он действительно работает!!! И да, я знаю, что он не очень красивый. Есть две вещи, которые меня особенно раздражают: 1.) Мне приходится объявлять свой маршрутизируемый префикс IPv6 сети снова, отключая и снова включая его на интерфейсе, подключенном к моему ПК. В противном случае моя машина с Windows 7 не заметит публичные IPv6 адреса на этой ссылке (автоматическое обнаружение). 2.) Мне приходится удалять и повторно добавлять маршрут IPv6 по умолчанию. Без этого хака я не смогу добраться до каких-либо IPv6 адресов, кроме моего маршрутизатора Mikrotik. Есть ли у кого-нибудь какие-нибудь идеи, что я могу делать не так? Мне также было бы интересно узнать о вашем опыте работы с "новым" интернет-протоколом. Есть ли у кого-нибудь здесь, кто управляет более крупной сетью IPv6?
У меня возникли проблемы с этим. Я зарегистрировал туннель у Hurricane Electric, и инструкции из первого поста в этой ветке, инструкции, которые tunnelbroker HE автоматически генерирует, и те, что в разделе "My First IPv6 Network" в вики, не совпадают. Однако я не могу пройти первый шаг, то есть завести туннель. Вот что у меня есть: /interface 6to4 add comment="Hurricane Electric IPv6 Tunnel Broker" disabled=no local-address=97.78.xxx.xxx mtu=1280 \ name=sit1 remote-address=209.51.161.58 /ipv6 route add comment=" " disabled=no distance=1 dst-address=2000::/3 gateway=2001:470:4:33f::1 scope=30 \ target-scope=10 /ipv6 address add address=2001:470:4:33f::2/64 advertise=yes comment="" disabled=no eui-64=no interface=sit1 Я могу пинговать локальный IPv6-конец туннеля, и я могу пинговать удалённый (209.51.161.58) конец IPv4-туннеля. Мой конечный/локальный адрес верный, он соответствует тому, что указано на сайте HE tunnelbroker. Но туннель как будто не поднимается, и я не могу пинговать 2001:470:4:33f::1, конец туннеля от HE. Я пробовал отключать файрвол, перезагружал, но безрезультатно. У меня роутер Mikrotik уже около шести часов, и я в тупике. Это RB750G, ROS 4.10, прошивка 2.26. (Это может быть связано или не связано с другой проблемой, где я назначил IPv6-адрес интерфейсу LAN, но машины в локальной сети не получают RA, и, как следствие, никогда не получают адреса. Тот факт, что RA не проходит через туннель, также может быть проблемой?) /ipv6 nd add advertise-dns=no advertise-mac-address=yes disabled=no hop-limit=unspecified interface=all \ managed-address-configuration=no mtu=unspecified other-configuration=no ra-delay=3s ra-interval=\ 3m20s-10m ra-lifetime=30m reachable-time=unspecified retransmit-interval=unspecified Любые советы и шаги по устранению неполадок были бы очень полезны!
Привет, чувак! У меня была проблема с этим скриптом на моём Mikrotik. Когда я запускаю скрипт, получаю такую ошибку: 21:54:03 script,info -ERROR: This tunnel is already associated with this IP address. Please try to limit your updates to IP changes. Проверяя, я увидел, что проблема возникает, когда я пытаюсь получить адрес конечной точки на моей системе: [admin@] /ipv6> /interface 6to4 [admin@] /interface 6to4> print Flags: X - disabled, R - running # NAME MTU LOCAL-ADDRESS REMOTE-ADDRESS 0 R ;;; Hurricane Electric IPv6 Tunnel Broker sit1 1280 XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX [admin@] /interface 6to4> get (sit1) local-address [admin@] /interface 6to4> [admin@] /interface 6to4> get (sit1) LOCAL-ADDRESS input does not match any value of value-name [admin@] /interface 6to4> Кстати, сегодня решил это, создав новый экземпляр скрипта.
:if ([:len $HEipv4addr] = 0) do={ :log error ("Не удалось получить IP для интерфейса " . $WANinterface) :error ("Не удалось получить IP для интерфейса " . $WANinterface) }
# Обновить интерфейс HEtunnelinterface с IP-адресом WAN /interface 6to4 { :if ([get ($HEtunnelinterface) local-address] != $HEipv4addr) do={ :log info ("Обновление IPv6-туннеля " . $HEtunnelid . " Client IPv4-адрес до нового IP " . $HEipv4addr . "...") disable $HEtunnelinterface
# Добавить файл в лог для просмотра :log info ([/file get ($outputfile) contents])
# Убрать мусор /file remove ($outputfile)
} else={ # Если IPv4-адрес клиента не изменился, залогировать это, чтобы мы знали, что скрипт работает :log info ("Обновление " . $HEtunnelinterface . ". Изменений нет, IP всё ещё " . $HEipv4addr ) } }
horza, я нашел, что твой скрипт не работает под 6.31. Скрипт останавливается на команде `/tool fetch`, и эта команда не выполняется (файл HE-.txt не создается). Я воспроизвел эту команду вручную в командной строке и обнаружил, что RouterOS жалуется на знак "?" в параметре `url=`. Я попытался экранировать "?" с помощью "" – это не имеет смысла. Есть только один способ запустить эту команду правильно – заключить значение `url=` в двойные кавычки, например, `url="https://:…"`, но мой небольшой опыт в написании скриптов не позволяет мне обновить твой скрипт.