1

Я пытаюсь настроить сервер OpenVPN, чтобы клиенты могли использовать его подсеть IPv6. Сервер работает под управлением Debian Wheezy, а клиент - OS X 10.9.5. Вот конфигурация сервера:

port 1194
proto udp
dev tun
tun-ipv6
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.100.100.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
tls-auth ta.key 0
cipher DES-EDE3-CBC
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
server-ipv6 MY:PUBLIC:IPV6:SUBNET::/64
push "route-ipv6 0::/0"

И вот конфиг клиента:

client
dev tun
tun-ipv6
proto udp
remote server.address 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3
tls-auth ta.key 1
cipher DES-EDE3-CBC

Связь по протоколу IPv4 работает безупречно, но есть некоторые странные проблемы с IPv6. Клиент получает адрес IPv6 при подключении, но единственное, что отвечает на эхо-запросы (или принимает любые пакеты IPv6 в этом отношении), - это сам сервер. Похоже, что пакеты, которые должны идти в глобальный Интернет, не маршрутизируются через соответствующий интерфейс на сервере, который в моем случае является eth0. IPv6-адрес назначается eth0 статически из подсети, предоставленной моим хостинг-провайдером, и все работает с сервера; например, я могу пропинговать ipv6.google.com с него. Параметры net.ipv6.conf.default.forwarding и net.ipv6.conf.all.forwarding sysctl также включены.

2 ответа2

0

Я боролся с той же проблемой и по совпадению с Debian Wheezy.

Есть два варианта, которые вы могли упустить в данный момент (на сервере VPN):

  1. Нет правил пересылки ip6tables
  2. Нет маршрута по умолчанию IPv6

1. ip6tables

Как и в случае с IPv4, вам нужны явные правила пересылки брандмауэра, у меня это сработало:

# ip6tables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# ip6tables -A FORWARD -i tun0 -o eth0 -j ACCEPT

(соответственно измените интерфейсы, вы можете добавить -s VPN-IPv6-RANGE/SUBNET ко второму правилу для более явной переадресации).

2. маршрут по умолчанию

Это была проблема на моей стороне; у меня ушло около двух дней, прежде чем кто-то заставил меня переосмыслить настройки, и я обнаружил, что пропустил существенный побочный эффект forwarding = 1 в sysctl.

Когда вы устанавливаете net.ipv6.conf.all.forwarding = 1 , автоконфигурация адреса из объявлений маршрутизатора игнорируется. Другими словами, когда ваш маршрут по default установлен через автоконфигурацию, этот маршрут отбрасывается довольно быстро, и вы теряете соединение IPv6 с вашим сервером. Когда ваш маршрут по умолчанию теперь похож на default via fe80::... , это, вероятно, так.

Решением для этого является добавление явного маршрута по умолчанию через /etc/network/interfaces , например:

iface eth0 inet6 static
    address 2001:db8::2
    netmask 64
    gateway 2001:db8::1

Вы можете проверить, работает ли ваша настройка VPN (временно), посмотрев таблицу маршрутизации IPv6 на вашем сервере: ip -6 route show default и, если она пуста, добавить маршрут по умолчанию с ip -6 route add default via 2001:db8::1 (соответственно настройте на ваш локальный диапазон). Затем проверьте, может ли ваш VPN-клиент пропинговать какой-либо внешний IPv6-адрес.

Конфигурация OpenVPN

Небольшая разница в конфигурации на моей стороне:

  • push "route-ipv6 2000::/3" (2000:: до 3fff:ffff...)

вместо

  • push "route-ipv6 0::/0"

но эти маршруты эквивалентны в данный момент.

0

Итак, я выяснил, что вышестоящий маршрутизатор не будет просто безоговорочно пересылать пакеты для всей моей выделенной подсети на мой сервер. Чтобы он знал, чтобы переслать их, вы должны сообщить об этом явно через протокол NDP. Это необходимо сделать, когда клиент подключается и получает IPv6-адрес. Итак, короче говоря, вот как я это исправил. Добавьте это в конфигурацию OpenVPN на сервере:

script-security 3
client-connect /etc/openvpn/client-connect.sh

Создайте скрипт с именем /etc/openvpn/client-connect.sh со следующим содержанием:

#!/bin/sh
ip -6 neigh add proxy $ifconfig_pool_remote_ip6 dev eth0

Перезапустите OpenVPN. Подключитесь к серверу и наслаждайтесь вашим собственным будущим Интернета.

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