Оказывается, с моей настройкой было несколько проблем. Давайте документируем все!
Клиентская ОС
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.
Настройте подключение к 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.
Установите pptpd. (Конечно, обратите внимание на небезопасность PPTP в качестве протокола и подумайте об использовании OpenVPN или какой-либо другой альтернативы.)
Отредактируйте /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 использует их.)
Создайте пользователей для PPTP. Фильтры второго столбца основаны на аргументе name
в pptpd-options
. Отредактируйте /etc/ppp/chap-secrets
:
ivucica pptpd AHyperSecretPasswordInPlainText 10.0.101.2 10.0.101.3 10.0.101.4
Вы должны иметь возможность заменить адреса на *
вместо того, чтобы перечислять их вручную. Я не пробовал это.
Назначьте своим пользователям PPTP некоторые префиксы IPv6. ПРИМЕЧАНИЕ: это используется исключительно сценарием, который я перечислю ниже, который получен из сценария Конрада.
Отредактируйте /etc/ppp/ipv6-addr
:
ivucica:1234
littlejohnny:1235
Добавить новый файл /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
Скрипт изменит конфигурацию radvd
в /etc/ppp/ipv6-radvd/
… и убедитесь, что папка существует!
mkdir /etc/ppp/ipv6-radvd
Также добавьте /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. :-)