Маршрутизація загальнодоступного ipv6-трафіку через тунель openvpn


13

Що я намагаюся зробити - це прокласти трафік IPv6 через тунель vpn. Таким чином, я повинен мати можливість використовувати IPv6 в мережі, яка не підтримує IPv6.

У мене VPS, якому призначений блок IPv6. Частину цього блоку я хочу використовувати для клієнтів openvpn. Я мав на увазі діапазон 2001:db8::111:800:0/112(префікс анонімізований), оскільки openvpn підтримує лише / 64 та / 112 як підмережі.

IPv6 через тунель вже працює, від клієнта я можу пінг-сервер ( 2001:db8::111:800:1), а також інтерфейси на сервері ( 2001:db8::111:100:100і 2001:db8:216:3dfa:f1d4:81c0).

Незважаючи на те, що при спробі відірвати google.com від клієнта, я не отримаю відповіді (timeout time ping). Щоб налагодити цю проблему, я використав tcpdump для збору трафіку на сервері, і я бачу, як пакети ping виходять, але відповіді не повертаються. Додавання правил журналу до ip6tables показує те саме, що пакети виходять, але нічого не відбувається.

Я використовував онлайн-інструмент traceroute, який отримує тайм-аут з мого сервера. Я також намагався встановити ip безпосередньо на інтерфейсі, що призводить до того, що ip ( 2001:db8::111:800:1001) буде доступним, тому я думаю, що це проблема маршрутизації.

Я ввімкнув переадресацію для ipv6 на /proc/sys/net/ipv6/conf/all/forwarding. ip6tables має політику дозволу для всіх ланцюгів.

Моє запитання: що саме потрібно для Linux, щоб прийняти цей пакет для ip, який не призначений для інтерфейсу, і подати його далі? Просто маршруту, який існує, здається недостатньо.

Ось налаштування для мого клієнта та сервера. Будь ласка, повідомте це, якщо потрібна додаткова інформація.

Клієнт

# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
    inet6 2001:db8::111:800:1001/112 scope global 
       valid_lft forever preferred_lft forever

# ip -6 routes
2001:db8::111:800:0/112 dev tun0  proto kernel  metric 256 
2000::/3 dev tun0  metric 1024 

Сервер

# ip -6 address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic 
       valid_lft 86254sec preferred_lft 14254sec
    inet6 2001:db8::111:100:100/128 scope global 
       valid_lft forever preferred_lft forever
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
    inet6 2001:db8::111:800:1/112 scope global 
       valid_lft forever preferred_lft forever

# ip -6 route
2001:db8::111:100:100 dev eth0  proto kernel  metric 256 
2001:db8::111:800:0/112 dev tun0  proto kernel  metric 256 
2001:db8::/64 dev eth0  proto kernel  metric 256  expires 86194sec
default via fe80::230:48ff:fe94:d6c5 dev eth0  proto ra  metric 1024  expires 1594sec

Можливо, ви шукаєте POSTROUTING ... MASQUERADEв natтаблиці. Але я не впевнений, що розумію повністю. Ви намагаєтесь тунелювати трафік IPv6? Якщо так, чи є у вас створені відповідні засоби? Чи -p ipv6дозволені пакети в правилах IPv4 (!)?
0xC0000022L

У вас є IP-конфігурація маршрутизатора (на eth0)? Ви керуєте роутером? (чи можете ви додати маршрути?)
ysdx

Спробуйте використовувати TRACEцільову таблицю iptables raw target (можливо, тут не так вже й багато) ip neighbour, і ip route get. Також, будь ласка, вкажіть, хто пінг пінг google.ca.
пілона

Pinging google.com або goole.com.?
тотті

@totti google.com, був помилковим
Ikke

Відповіді:


12

Потрібно сказати маршрутизатору використовувати сервер для цієї підмережі VPN: правильне рішення вашої проблеми - додати маршрут на маршрутизаторі для підмережі OpenVPN.

Якщо ви не можете цього зробити, оскільки ви не можете торкнутися маршрутизатора, іншим рішенням є встановлення проксі-сервера NDP для клієнтів за eth0посиланням.

Оскільки ви використовуєте VPS, ви, ймовірно, не можете додавати маршрутизатори до маршрутизатора: вам, ймовірно, доведеться використовувати друге рішення.

Додайте маршрут для підмережі

Правильне рішення вашої проблеми - сказати маршрутизатору, що підмережа VPN повинна бути маршрутизована через сервер OpenVPN (це для Linux):

ip route add 001:db8::111:800::/112 via 2001:db8::111:100:100

Вам потрібно включити переадресацію IPv6 на сервері:

sysctl sys.net.ipv6.conf.all.forwarding=1

Проксі-сервер NDP

Здається, маршрутизатор налаштований для передачі всього діапазону IPv6 за eth0посиланням: ви можете налаштувати проксі-сервер NDP.

Ви повинні бачити запити NDP в eth0інтерфейсі сервера для вашої підмережі OpenVPN, намагаючись отримати доступ до решти Інтернету від клієнта.

Вам потрібно ввімкнути переадресацію IPv6 на сервері та проксі-сервер NDP:

sysctl -w net.ipv6.conf.all.proxy_ndp = 1

підпромежувальний проксі NDP

Ядро Linux не дозволяє додавати проксі-сервер NDP для підмережі, а лише для окремих IP-адрес. Ви можете використовувати демон (наприклад, ndppd, щоб встановити проксі-сервер NDP для всієї підмережі (ніколи не використовувався).

За проксі-сервером IP NDP

Іншим рішенням є додавання проксі-сервера NDP для кожної IPv6 VPN-підмережі:

for i in $(seq 0 65535) ; do
  ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0
done

Це повинно працювати, оскільки у вас є порівняно невелика кількість IP-адрес у підмережі OpenVPN.

Динамічний проксі-сервер NDP з гачками OpenVPN

Ви повинні мати можливість використовувати гачки OpenVPN для додавання динаміки проксі-сервера NDP.

Додати гачок у конфіденційному сервері OpenVPN:

learn-address /etc/openvpn/learn-address

З наступним learn-addressсценарієм:

#!/bin/sh

action="$1"
addr="$2"

case "$action" in
    add | update)
        ip neigh replace proxy "$addr" dev tun0
        ;;
    delete)
        ip neigh del proxy "$addr" dev tun0
        ;;
esac

Дивіться цю тему .

Коротка відповідь

for i in $(seq 0 65535) ; do
  ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0
done

1
Спасибі, я перегляну це. Зараз я розумію проблему. ipsidixit.net/2010/03/24/239 містить детальну інформацію про це.
Іке

Я маю ip від клієнта як проксі-сусіда. Я ввімкнув sys.net.ipv6.conf.all.proxy_ndp, але я все ще не можу пінг google.com. Коли я перевіряю сервер, я бачу пакети ndp-рішень, що надходять на eth0, але жодна реклама не виходить.
Іке

1
Після установки та налаштування npd6 він раптом спрацьовує!
Іке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.