Я не понял сначала, думал что там pptp выдает сразу адрес IPv6. Теперь ясно, у меня адрес статический, поэтому проблемы как таковой нет.
Спасибо, вырубил. Помогло. Работает. Шлюз сконфигурировался на LL адрес провайдера.
Printable View
А можно ли сбриджовать локалку с ppp? Я попробовал поменять net_id на интерфейсе, и провайдер не против:). То есть получилось послать Route Solitation с разных адресов LL, и соответственно сконфигурировать разные адресы из одного префикса. Пинги ходят нормально. Выходит, если сделать прозрачный бридж в локалку, должно заработать.
ppp интерфейс сбриджить нельзя, да даже если и можно pptp станет частью локалки, нафига тогда файрвол, маршрутизация и прочее? очень некрасивое решение
попробуй применить вот этот патчик, ну и выставить accept_ra, accept_redirects на ppp интерфейсе в 2
Code:diff -BurpN linux-2.6.22.19/net/ipv6/ndisc.c linux-2.6/net/ipv6/ndisc.c
--- linux-2.6.22.19/net/ipv6/ndisc.c 2010-07-11 00:00:00.000000000 +0000
+++ linux-2.6/net/ipv6/ndisc.c 2010-07-14 19:45:32.000000000 +0000
@@ -1024,7 +1024,7 @@ static void ndisc_router_discovery(struc
skb->dev->name);
return;
}
- if (in6_dev->cnf.forwarding || !in6_dev->cnf.accept_ra) {
+ if ((in6_dev->cnf.forwarding && in6_dev->cnf.accept_ra < 2) || !in6_dev->cnf.accept_ra) {
in6_dev_put(in6_dev);
return;
}
@@ -1280,7 +1280,7 @@ static void ndisc_redirect_rcv(struct sk
in6_dev = in6_dev_get(skb->dev);
if (!in6_dev)
return;
- if (in6_dev->cnf.forwarding || !in6_dev->cnf.accept_redirects) {
+ if ((in6_dev->cnf.forwarding && in6_dev->cnf.accept_redirects < 2) || !in6_dev->cnf.accept_redirects) {
in6_dev_put(in6_dev);
return;
}
ОК. Я тоже так подумал. Только пока с анонсем слабовато. Но уже получилось выслать пакеты из локалки в инет. Сделал следущее:
1) Получил префикс от провайдера на ppp0 + LL адрес на стороне провайдера.
2) Включил форвардинг , поправил default gw на LL (исчез из таблицы после форвардинга)
3) Перенес полученный префикс на br0, удалив при этом с ppp0 (для роутинга хватити и LL) проблема - не ходят анонсы, комп в локалке видит старые адресы с he.net. Поэтому сконфигурировал ручками адрес на компе из префикса, полученного от провайдера. Роутинг настроил на адрес br0.
4) Пустил пинг с компа с правильным соурс адресом (по умолчанию комп пытается выйти со старым адресом IPv6). Работает.
Вообщем то, так может быть, можно савтоматизировать весь процесс и разобраться с глюками в аноунсинге. Будет работать и маршрутизация, и файервол. Единственное ограничение - у роутера не будет глобального адреса на ppp0, это по идее не мешает, если файерволем пустить траффик только на один адрес на br0.
А это должен делать сам pppd с ipv6cp, оно сконфигурирует только ll
то ест все таки ra пришло с указанием шлюза?
p.s анонсы обычно содержат шлюзы в виде link layer address, а не глобального, это нормально
Так стоп. Зачем переносить на br0? Можно сделать трюк, назначив br0 тот же самый адрес с маской /128.
Анонсы в локалку пойдут только если forward==1 и запустишь radvd с корректным интерфейсом, более того, на br0 адрес по сути и не нужен, достаточно ll
не дошли адверты. можно просто перезапустить интерфейс.
это невозможно, ната в ipv6 нет.
theMIROn
Еще и ipv6: Update Neighbor Cache when IPv6 RA is received on a router не?
Не, шлюз скофигурировался через ipv6cp. Просто потом исчез, когда я включил форвардинг на ppp0. Поэтому поправил вручную.
Я подумал, что если перенесу весь префикс, то роутер его вышлет в локалку через RA - не заработало.
То есть не достаточно просто поменять адрес на интерфейсе, нужно еще поменять конфиг в radvd? У меня через веб сконфигурирован префикс с he.net.
Я правильно понял, префикс на аноунсинг берется с radvd, а не с конфигурации интерфейса?
То есть , в сумме, чтобы заработал доступ из локальной сети с native IPv6 через ppp нужно сделать следующие:
1) Сконфигурировать форвардинг + accept_ra (патч), echo "2" > /proc/sys/net/ipv6/conf/default/accept_ra
2) Сконфигурировать и запустить ppp с +ipv6
3) Написать скрипт, который после получения префикса от провайдера заменит конфигурацию:
- ppp0 - замена адреса на префикс+net_id/128
- radvd - добавить новый префикс
- routing - удалить роутинг на префикс через ppp0, добавить этот роутинг через br0
- ppp0 - замена адреса на префикс+net_id/128
- br0 - замена адреса на префикс+net_id/64
- radvd - добавить новый префикс
- routing - ничего не делаем.
Раз уж пошла такая пьянка, то почему бы заодно не прояснить еще пару вопросов? ;)
У нас сейчас выключены
CONFIG_IPV6_OPTIMISTIC_DAD
CONFIG_IPV6_ROUTE_INFO
может стоит включить?
патч Влада с accept_ra == 2 заменяем на фирменный или добавляем фичу к фирменному патчу?