5

Я установил туннель, используя сервисы Hurricane Electric на компьютере Debian. Кажется, все в порядке; Я могу ping6 ipv6.google.com и открыть его в links .

Я также установил PPTP демон на машине. (Да, я читал, что PPTP небезопасен; это в первую очередь для экспериментальных целей.) Когда я подключаюсь к этому PPTP-демону с помощью Mac OS X, IPv4 работает нормально.

Однако я не могу заставить работать трафик IPv6. OS X не получает IPv6-адрес через PPTP и игнорирует объявления с использованием radvd , который, по-видимому, является демоном для объявления о существовании маршрутизатора IPv6. Чтобы уточнить: я вижу сообщения маршрутизатора, отправленные radvd появляются в Wireshark на интерфейсе ppp0 машины OS X.

В целом, это не производственная и не долгосрочная установка, просто то, что я хотел бы заставить работать (в противном случае я мог бы публиковать сообщения на ServerFault). Так что меня не волнует тот факт, что, если машина перезагрузится, половина настроек не будет работать до тех пор, пока она не будет сброшена вручную. На самом деле, это плюс для меня, в данном случае.

/etc/network/interfaces (фрагмент)

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 2001:dead:beef:f00d::2
        netmask 64
        endpoint  216.66.86.114
        ttl 255
        gateway 2001:dead:beef:f00d::1

/etc/pptpd.conf

option /etc/ppp/pptpd-options
localip 10.0.101.1
remoteip 10.0.101.2-200

/ и т.д. / ррр / pptpd-опции

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
nodefaultroute
lock
nobsdcomp
ipv6 ,

/ и т.д. / ррр / CHAP-секреты

ivucica pptpd THEPASSWORDHERE 10.0.101.2 10.0.101.3 10.0.101.4 10.0.101.5

/etc/radvd.conf

interface ppp0
{
        AdvSendAdvert on;
        prefix 2001:dead:beef:f00d::/64
        {
        };
};

Я включил пересылку ipv6:

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

И да, я перезапускал radvd всякий раз, когда я переподключал / пересоздал устройство ppp0. :-)

Что мне не хватает?

2 ответа2

6

Оказывается, с моей настройкой было несколько проблем. Давайте документируем все!

Клиентская ОС

Mac OS X не особенно любит IPv6 поверх PPP. Используйте следующее после того, как соединение было установлено:

sudo ipconfig set ppp0 AUTOMATIC-V6
sudo route add -inet6 default -interface ppp0

Предыдущий, кажется, заставляет OS X придерживаться рекламных объявлений маршрутизатора; последний добавляет маршрут по умолчанию для IPv6. (Теперь, если бы только версия route маршрутизацией для определенных мобильных телефонов -inet6 , я был бы счастливым деревянным мальчиком.)

Также обратите внимание, что OS X будет игнорировать любой адрес, который должен был быть согласован по IPv6, и настроит только локальный адрес. Это может помешать маршрутизации к OS X.

С другой стороны, Windows 8 (из всех систем!) с радостью подобрал адрес, отправленный через PPP, принял к сведению рекламу маршрутизатора и в целом настроил себя безупречно. PPTP действительно хорошо работает в Windows.

сервер

Первое, что я пропустил, было то, что туннельный брокер Hurricane Electric фактически назначает префиксы TWO /64; один должен быть предназначен исключительно для использования клиентом, а другой предназначен для маршрутизации дополнительных клиентов (таких как клиент PPTP). А если вам нужно больше адресов (или префиксов!), Вы даже можете получить префикс /48. (С IPv6 это означает, что есть больше битов для «вашего» использования; префикс HE занимает «только» 48 битов. Таким образом, вам предоставляется еще несколько битов для управления до того, как автоматически сгенерированный суффикс, созданный из MAC-адреса или даже созданный случайным образом, сработает и займет последние 64 бита. Теоретически вы могли бы шевелиться и подсеть даже при наличии только 64-битной памяти, но я видел странное поведение как в Windows 8, так и в OS X, поэтому я бы не стал слишком на это полагаться.)

Вместо прямой настройки radvd и запуска его в качестве сервера - просто не настраивайте его глобально. То есть не запускайте его как сервис на Debian.

Вместо этого давайте последуем примеру Конрада Розенбаума на Silmor.de и radvd после того, как pppd создаст интерфейс PPP.

  1. Настройте подключение к IPv6. Я использую Hurricane Electric; Я настроил это следующим образом:

    # hurricane electric tunnel
    # based on: http://www.tunnelbroker.net/forums/index.php?topic=1642.0
    auto he-ipv6
    iface he-ipv6 inet6 v4tunnel
        address 2001:470:UUUU:VVVV::2
        netmask 64
        endpoint  216.66.86.114
        ttl 255
        gateway 2001:470:UUUU:VVVV::1
        ## from http://lightyearsoftware.com/2011/02/configure-debian-as-an-ipv6-router/
        # I did not set up the routing of the /64 nor the /48 prefix here, but
        # this would ordinarily do it.  
        #up ip link set mtu 1280 dev he-ipv6
        #up route -6 add 2001:470:WWWW:VVVV::/64 he-ipv6
    
        # Note that Hurricane Electric provides different /64 IPv6 prefixes
        # for the client (UUUU:VVVV) and routing (WWWW:VVVV). 
        # And the /48 prefix is very different altogether.
    
  2. Установите pptpd. (Конечно, обратите внимание на небезопасность PPTP в качестве протокола и подумайте об использовании OpenVPN или какой-либо другой альтернативы.)

  3. Отредактируйте /etc/ppp/pptpd-options

    name pptpd
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe-128
    proxyarp
    nodefaultroute
    lock
    nobsdcomp
    ipv6 ::1,::2
    

    Обратите внимание, что последняя строка отличается от текста в моем вопросе. Вы присваиваете некоторые статические адреса, которые могут соблюдаться вашей клиентской ОС или нет. (OS X, кажется, игнорирует их, но Windows использует их.)

  4. Создайте пользователей для PPTP. Фильтры второго столбца основаны на аргументе name в pptpd-options . Отредактируйте /etc/ppp/chap-secrets :

    ivucica pptpd AHyperSecretPasswordInPlainText 10.0.101.2 10.0.101.3 10.0.101.4
    

    Вы должны иметь возможность заменить адреса на * вместо того, чтобы перечислять их вручную. Я не пробовал это.

  5. Назначьте своим пользователям PPTP некоторые префиксы IPv6. ПРИМЕЧАНИЕ: это используется исключительно сценарием, который я перечислю ниже, который получен из сценария Конрада.

    Отредактируйте /etc/ppp/ipv6-addr :

    ivucica:1234
    littlejohnny:1235
    
  6. Добавить новый файл /etc/ppp/ipv6-up.d/setupradvd :

    #!/bin/bash
    ADDR=$(grep ^$PEERNAME: /etc/ppp/ipv6-addr |cut -f 2 -d :)
    if test x$ADDR == x ; then
     echo "No IPv6 address found for user $PEERNAME"
     exit 0
    fi
    
    # We'll assign the user a /64 prefix.
    # I'm using a Hurricane Electric-assigned /48 prefix.
    
    # Operating systems seem to expect to be able to assign the 
    # last 64 bits of the address (based on ethernet MAC address
    # or some other identifier). So try to obtain a /48 prefix.
    
    # If you only have a /64 bit prefix, you can try to assign a
    # /80 prefix to your remote users. It works, but I'm only now
    # trying to enable these users to have routing.
    
    USERPREFIX=2001:470:XXXX:$ADDR
    USERPREFIXSIZE=64
    USERPREFIXOURADDRESS=1
    USERPREFIXUSERADDRESS=2
    
    # Add the address for your side of the tunnel to the PPP device.
    ifconfig $IFNAME add $USERPREFIX::$USERPREFIXOURADDRESS/$USERPREFIXSIZE
    
    # establish new route
    # (when a packet is directed toward user subnet, send it to user ip)
    route -6 add $USERPREFIX::/$USERPREFIXSIZE gw $USERPREFIX::$USERPREFIXUSERADDRESS
    
    #generate radvd config
    RAP=/etc/ppp/ipv6-radvd/$IFNAME
    RA=$RAP.conf
    echo interface $IFNAME >$RA
    echo '{ AdvSendAdvert on; MinRtrAdvInterval 5; MaxRtrAdvInterval 100;' >>$RA
    echo ' prefix' $USERPREFIX::/$USERPREFIXSIZE '{};' >>$RA
    
    # Instead of your DNS...
    #echo ' RDNSS $USERPREFIX::$USERPREFIXOURADDRESS {}; };' >>$RA
    # ...try assigning the Google DNS :)
    echo ' RDNSS 2001:4860:4860::8888 {}; }; ' >> $RA
    
    # The creation of radvd configuration could be more readable, but whatever.
    
    # Start radvd
    /usr/sbin/radvd -C $RA -p $RAP.pid
    
    exit 0
    

    Не забудьте chmod скрипт, чтобы сделать его исполняемым pppd :

    chmod 755 /etc/ppp/ipv6-up.d/setupradvd
    
  7. Скрипт изменит конфигурацию radvd в /etc/ppp/ipv6-radvd/ … и убедитесь, что папка существует!

    mkdir /etc/ppp/ipv6-radvd
    
  8. Также добавьте /etc/ppp/ipv6-down.d/setupradvd (и сделайте его исполняемым!) - дословно от Конрада :

    #!/bin/bash
    RAP=/etc/ppp/ipv6-radvd/$IFNAME
    kill `cat $RAP.pid` || true
    rm -f $RAP.*
    

    А также

    chmod 755 /etc/ppp/ipv6-down.d/setupradvd
    

Я не тестировал использование DHCPv6 для распространения информации о маршрутизации, адресах или DNS, тем более что rtadv должен выполнять эти роли. Это также не помогло бы мне, потому что в случае Mountain Lion OS X все еще не поставляется с клиентом DHCPv6 (возможно, намеренно; девять из десяти стоматологов, большинство экспертов по IPv6 согласны с тем, что DHCP - это зло).

Еще раз, пожалуйста, обратите внимание на комментарии Майкла о безопасности PPTP ; рассмотреть возможность использования OpenVPN в производстве.

Да, у Конрада Розенбаума также есть хорошее руководство по IPv6 через OpenVPN. :-)

1

Похоже, что Poptop не поддерживает IPv6. И его сопровождающие рекомендуют не использовать его в любом случае по соображениям безопасности.

Известно, что PPTP является ошибочным протоколом. Разработчики протокола Microsoft рекомендуют не использовать его из-за неотъемлемых рисков. Многие люди используют PPTP в любом случае из-за простоты использования, но это не значит, что он менее опасен. Сопровождающие клиенты PPTP и Poptop рекомендуют вместо этого использовать OpenVPN (на основе SSL) или IPSec.

Последние версии OpenVPN поддерживают IPv6, так что это, вероятно, ваш лучший выбор при переходе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .