|
|||||||
Сами себе туннельный брокер IPv6 с помощью openvpn и 6to4
Время создания: 27.10.2013 01:42
Текстовые метки: ipv6, ipv4, openvpn, 6to4, туннельный брокер, nat, linux, vpn
Раздел: Компьютер - Web / Internet - IPv6
Запись: xintrea/mytetra_syncro/master/base/1382823775asgqvgiq12/text.html на raw.github.com
|
|||||||
|
|||||||
Вы хотите чтобы Ваши устройства (Windows\Linux\Android\iOS) начали использовать IPv6, но Ваш провайдер его еще не предоставляет? У Вас есть собственный сервер\VDS\просто компьютер с линуксом и постоянным прямым IPv4 (НЕ IPv6) адресом или даже свой openvpn сервер? Тогда возможно эта статья Вам поможет. Она не для маститых сетевых гуру, я просто собрал в одном месте набор указаний с целью распространения IPv6 среди масс. Хотя буду благодарен всем маститым гуру, которые меня раскритикуют в комментах и укажут на ошибки. Так как пишу я пост практически сразу после того, как система заработала. Все может быть бесконечно далеко от идеала. Побудил меня настроить подобную систему мой новый планшет, который на стоковой (других пока что нет) прошивке не хочет получать IPv6 от wifi-роутера, не говоря уже о невозможности использовать IPv6, работая через 3G. Нам понадобится следующий инструментарий:
Настраиваем IPv6 на сервере через 6to4 Для облегчения перехода на IPv6 создана технология 6to4: каждому IPv4 адресу в соответствует подсеть /48 IPv6-адресов. Подробнее: http://version6.ru/6to4/howto Предположим, IP Вашего сервера: 208.64.121.161 (взял IP test.com). Идем на 6to4.version6.net/?lang=en_GB, вбиваем IP, например, 208.64.121.161. Получаем следующие настройки: Your IPv4 address is 208.64.121.161 Your 6to4 address is 2002:d040:79a1::2080:6412:1161 6to4 gateway address is 192.88.99.1 То есть, преобразование адреса происходит так. В существующем IPv4-адресе все числа переводятся в трехсимвольное представление. То есть, в нашем случае число 64 переводится в 064. Далее IPv4-адрес размещается в трех последних сегментах IPv6-адреса 2080:6412:1161. И к нему прибавляется диапазон сервиса 6to4 2002:d040:79a1. Нам нужен сгенеррованный IPv6- адрес 2002:d040:79a1::2080:6412:1161. Часть 2002:d040:79a1: - это наша /48 IPv6 подсеть. Кстати, у вас две группы после 2002 в адресе должны быть другими! В них "закодирован" Ваш IPv4. Придумываем себе адрес в этой подсети. Для простоты можно использовать ::2 (почему-то замечены глюки при использовании ::1, может кто расскажет почему, а может мне показалось), то есть 2002:d040:79a1::2. Создаем туннель (заменяя IPv4 на Ваш адрес): ip tunnel add tun6to4 mode sit remote any local 208.64.121.161 ttl 64 Поднимаем интерфейс: ip link set dev tun6to4 up Задаем интерфейсу IPv6 адрес, который придумали раньше: ip -6 addr add 2002:d040:79a1::2/128 dev tun6to4 Задаем маршрут по умолчанию (192.88.99.1 — общий маршрутизатор для 6to4, не меняем его!): ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1 После этого наш сервер должен получить возможность работать по IPv6. Проверяем: ping6 2001:ad0::1 В генте я это все сохранил, добавив в /etc/conf.d/net следующие строчки (создав линк net.lo->net.tun6to4 и не забыв сделать rc-update add net.tun6to4 default): iptunnel_tun6to4="mode sit remote any local 208.64.121.161 ttl 64" config_tun6to4="2002:d040:79a1::2" routes_tun6to4="2000::/3 via ::192.88.99.1 dev tun6to4 metric 1" rc_net_tun6to4_need="net.eth0" Если пинги идут, значит этап 1 пройден. Если не идут, думаем, проверяем везде ли мы заменили то, что надо заменить на наши данные. Если ничего не помогает подробно рассказываем что делали (с указанием IP сервера) в комментах, попробую помочь. В личку не помогаю. Настраиваем openvpn для работы с IPv6 Как настроить openvpn писано до меня не раз. В том числе тут. Юзайте поиск. Я на всякий случай привожу свои конфиги, вырезав приватные данные. Сервер: port censored proto udp dev tun ca vpn1/ca.crt cert vpn1/server.crt key vpn1/server.key dh vpn1/dh2048.pem server 10.censored 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 60 comp-lzo adaptive user nobody group nobody persist-key persist-tun fast-io status openvpn-status.log max-clients 30 tls-auth vpn1/ta.key 0 chroot /var/chroot/openvpn cipher AES-256-CBC auth SHA512 tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA local censored client-to-client ping-timer-rem management localhost 7505 client-config-dir ccd Клиент: client dev tun proto udp remote censored censored resolv-retry infinite nobind persist-key persist-tun comp-lzo adaptive verb 3 key-direction 1 cipher AES-256-CBC auth SHA512 tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA verify-x509-name 'C=RU, ST=RU, L=censored' censored <tls-auth> censored </tls-auth> Для раздачи IPv6 через openvpn придумываем номер /64 подсети. Это любое число от 0 до FFFF. Например, 5. То есть в моем случае /64 подсеть будет выглядеть целиком так: 2002:d040:79a1:5::. Добавляем в openvpn.conf на сервере строчку: server-ipv6 2002:d040:79a1:5::/64 В принципе в этой строчке и заключается вся настройка openvpn для IPv6. Осталось только указать openvpn-серверу, чтоб он сообщал клиентам маршрут по умолчанию для IPv6. Вы можете это делать либо глобально в серверном openvpn.conf либо в ccd файле для каждого клиента с помощью строчки: push "route-ipv6 2000::/3" Так же необходимо указать клиентам IPv6 DNS-сервер. Я использую свой, Вы можете воспользоваться гугловским. В серверном openvpn.conf или в ccd: push "dhcp-option DNS 2001:4860:4860::8888" (Пере)запускаем сервер. В конфиге клиента ничего менять не надо. Подключаемся к серверу и должны получить IPv6 адрес. На клиенте смотрим: ip -6 addr list Видим что-то типа: 9: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100 inet6 2002:d040:79a1:5::1005/64 scope global Аналогично смотрим IPv6 адрес tun-интерфейса на сервере, скорее всего он будет заканчиваться на ::1 (2002:d040:79a1:5::1). Пробуем пинговать с клиента на сервер и обратно. Если пингуется, осталось совсем немного. Пробуем пинговать с клиента гугловский DNS: ping6 2001:4860:4860::8888 не пингуется, так как IPv6 переадресацию надо разрешать аналогично IPv4. Разрешаем: sysctl -w net.ipv6.conf.all.forwarding=1 И сохраняем в /etc/sysctl.conf строчку: net.ipv6.conf.all.forwarding = 1 Должны пойти пинги с клиента до гугла и вообще появиться возможность использовать IPv6 с клиента. Например, попробуйте в броузере открыть ipv6.google.com. Все? Ни в коем случае! Прелестью IPv6 является то, что все адреса прямые. Поэтому все ваши openvpn-клиенты будут полностью доступны из большого, опасного интерента. Поэтому не забудьте настроить фаервол на сервере (для IPv6 используется ip6tables). Как минимум я сразу вписал следующее: Прикрываем сам сервер: ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT ip6tables -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT ip6tables -A INPUT -j DROP Прикрываем клиентов openvpn (так же прописывается на сервере!) ip6tables -A FORWARD -p tcp -m conntrack --ctstate NEW -m tcp! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP ip6tables -A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT ip6tables -A FORWARD -i tun0 -j ACCEPT ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT ip6tables -A FORWARD -j DROP Ну вот вроде и все. Мой Galaxy Tab 3 10.1 обрел возможность выхода в IPv6. Кстати, если кто знает как на нем включить возможность прямой работы с IPv6 через WiFi (у меня роутер раздает через radvd, все в том числе телефон с cyanogenmod адреса получают, а планшет со стоковой прошивкой нет :( ) — расскажите, пожалуйста, буду очень благодарен. Шлите ошибки в приват, всем хорошей пятницы и выходных. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|