LINUX.ORG.RU
ФорумAdmin

А есть ли способ заставить OpenVPN туннель маршрутизировать глобальные IPv6 адреса?

 , ,


0

5

Пример: настроен OpenVPN-туннель, который отдаёт клиенту глобальный адрес из своего префикса.

Если клиент на хосте, то всё в порядке — интерфейсу tun0 этого хоста присваивается адрес, выданный ВПН, пакеты в него рутятся с этим адресом, и всё работает.

А вот если клиент поднят на маршрутизаторе, за которым есть хосты со своими глобальными адресами — то хрен. Пакет с адресом хоста доходит до туннеля и там пропадает (потому что его адрес источника не совпадает с адресом интерфейса, и туннелю он чужой). И чо делать?

Ну, то есть, всегда можно в лоб запилить маскарадинг, и оно заработает. Но как-то поизящней нельзя? Там, серверу волшебную опцию скормить, интерфейсу туннеля какие-то флаги задать, типа того. Может, TAP вместо TUN поднять, или чо.

★★★★★

Последнее исправление: alegz (всего исправлений: 1)

Зависит от того что у тебя есть - всего 1 IPv6-адрес или целая делегированная IPv6-подсеть. Если второе - то просто выдавай из неё адреса клиентам OpenVPN и всё. Если в наличии только 1 адрес - тогда NAT.

Если подсеть не смаршрутизирована на адрес твоего сервера, а отдается прямо в интерфейс, тогда да, возможно придется поплясать с proxy ndp или объединить интерфейсы туннелей в мост(заменив TUN на TAP в OpenVPN).

Но, опять же, без понимая что конкретно у тебя в наличии - подсказать правильный ход решения сложно.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Адрес хостером выдан один, но XXXX:XXXX:XXXX:XXXX::0 /64. То есть глобальные адреса клиентам туннеля я назначать могу в пределах /64, и так и делаю, но они (кроме ::0) маршрутизироваться хостером наружу не будут, пробовал. Наверно, можно пинать поддержку, но пока решилось SNAT-ом на хостинге. Проблема-то не в этом, а на клиентском конце, и только в случае клиента, крутящегося на маршрутизаторе, как я в посте и сказал.

То есть вот так работает:

хостер с <host_global/56> 
|
VPS c <host_global/64>::0
(серверный адрес туннеля <host_global/64>:<subnet>:1)
|
туннель
|
хост (клиентский адрес туннеля <host_global/64>:<subnet>:1000)

А вот так — нет

хостер с <host_global/56> 
|
VPS c <host_global/64>::0
(серверный адрес туннеля <host_global/64>:<subnet>:1)
|
туннель ← сюда пакеты от локальной сети уже не попадают
|
маршрутизатор (клиентский адрес туннеля <host_global/64>:<subnet>:1000)
(пускать <my_global/64>:<address> в туннель не хочет)
|
локальная сеть со своими <my_global/64>:<address>

В общем-то, маскарадинг на маршрутизаторе проблему решает (в этом случае даже и туннелю глобальные адреса задавать не надо, все равно NAT на обоих концах), но двойной NAT — как-то неэстетично. Да и в принципе хочется понять, что может мешать в данном случае.

alegz ★★★★★
() автор топика
Ответ на: комментарий от alegz

Убери NAT, запусти ping и смотри tcpdump-ом на разных интерфейсах где трафик поступает/не поступает. Если где-то на подконтрольном тебе оборудовании трафик в один интерфейс входит, а из другого - не выходит, то вот ты проблему и нашел.

А вот если трафик везде транзитом проходит и уходит к хостеру - тогда это вопросы к нему.

То есть глобальные адреса клиентам туннеля я назначать могу в пределах /64, и так и делаю, но они (кроме ::0) маршрутизироваться хостером наружу не будут, пробовал

А если назначить дополнительный адрес(с маской /128) на машину с OpenVPN в пределах /64 из с него пытаться отправить трафик(у ping есть для этого ключ -I) - так работать будет? Если нет, тогда ой

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от alegz

Не-не-не, ты не понял. На VPS у хостера, где IPv6 у тебя работает назначить ДОПОЛНИТЕЛЬНЫЙ адрес. Не на клиенте с OpenVPN

P.S. Хотя погоди-ка. А подсеть IPv6 my_global у тебя откуда? Хостер дает? Если нет - то он и не будет маршрутизировать эти адреса

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Нет, ничего кроме ::0 не маршрутизируется хостером, проверено давно. Ещё раз — что там у хостера, дело десятое.

my_global от местного провайдера, ну дак оно всё равно SNAT-иться наружу будет, если до сервера дойдет. Когда дойдёт, там уже разберусь, что с ним делать. Проблема-то в том, что даже не доходит, tun не пускает. Надо бы найти что-то почитать про IPv6 маршрутизацию…

alegz ★★★★★
() автор топика
Последнее исправление: alegz (всего исправлений: 1)
Ответ на: комментарий от alegz

Чёт фигня какая-то нарисована. Почему там везде /64?

Если впс получает не on-link, а link-local (маршрут по-умолчанию через fe80:ххх%vtnet0 или подобное), то сеть нарезается и всё: для впс, например, /72, для туннеля техсеть /72, для сетью за туннелем /72. Только вот адреса придётся вручную прописывать на клиентах или с дхцпв6 заморачиваться, бо для SLAAC /64 надо…

Если онлинк, тады ой. Нат самое простое, хотя можно и с бинатом потр… поэкспериментировать.

anonymous
()
Ответ на: комментарий от anonymous

Ну, что регистранты на ЛОРе ни хрена не шарят, привычно. Но и анонимусы уже скатились…

Чо вы все упёрлись в «выдачу адресов», придурь? Это единственное, что вы все слышали о IPv6? SLAAC, херак…

ЧЕРЕЗ ТУННЕЛЬ, блждад, НЕ ИДЁТ ТРАФФИК. ПОЧЕМУ? Чё ему не хватает? И как сделать, чтоб шёл?

alegz ★★★★★
() автор топика
Ответ на: комментарий от alegz

Клоунаду прекращай и иди читать как работает IPv6. И прекращай думать что оно такое же как IPv4. Тогда поймешь, почему «не идёт траффик», который при твоём подходе и не должен никуда ходить.

anonymous
()

Пакет с адресом хоста доходит до туннеля и там пропадает (потому что его адрес источника не совпадает с адресом интерфейса, и туннелю он чужой). И чо делать?

Не сталкивался именно с ipv6 туннелями, но звучит как-то странно. Маршруты через туннель на обоих концах туннеля точно есть?

router ★★★★★
()
Ответ на: комментарий от alegz

ЧЕРЕЗ ТУННЕЛЬ, блждад, НЕ ИДЁТ ТРАФФИК. ПОЧЕМУ?

Чем орать, лучше б понавешал хуков с -j TRACE в ip6tables и посмотрел в sysctl на всех ли нужных тебе интерфейсах включен forwarding для ipv6 и глянул бы наконец в tcpdump

Pinkbyte ★★★★★
()