LINUX.ORG.RU
ФорумAdmin

Выход в yggdrasil без клиента на ПК, OpenWrt

 , ,


1

2

цель: доступ к yggdrasil через роутер с любого ПК в сети, без установки клиента.

что я сделал:

  • установил yggdrasil, вписал несколько публичных пир.
  • в /etc/config/network добавил option ip6prefix 302:6547:1fc5:3467::/64 для интерфейса wan6.
  • там же, добавил config route6 option interface 'lan' option target '302:6547:1fc5:3467::/64' option gateway '0200::/7'

Нет результата. /etc/config/firewall я не трогал. что за radvd я не понял, не нашёл в репе OpenWrt. Что мне надо сделать? RTFM не помогает, т.к. я впервые работаю с OpenWrt (да и маршрутизаций в принципе).

P.S. я тут на время посмотрел. я - спать; не смогу отвечать на вопросы до утра.

cyclbabel
() автор топика

Я всё ещё туплю. Нужна помощь: /etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
...

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0.1'

config device
        option name 'eth0.1'
        option macaddr '...'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '64'     # выделяю одну подсеть.
        option ip6hint '1'        # id подсети; не помню, зачем оно надо.
        option ip6ifaceid '::ff'  # аналогично.

config interface 'wan'
        option device 'eth0.2'
        option proto 'dhcp'


config interface 'wan6'
        option device 'eth0.2'
        option proto 'dhcpv6'
        option reqprefix '64'     # говорю, что надо быть в подсети.
        option forceprefix '1'    # без префикса не пущать.
        option ip6prefix '302:6547:1fc5:3467::/64'
        option ip6gw '::1'        # назначить себя (роутер) как выход (что я делаю?).

config route 'ygggw'
        option interface 'wan6'
        option target '302:6547:1fc5:3467::/64'  # в теории, я хочу перенаправить траффик всех в подсети в подсеть, выделенную иггдрасилем.
        option gateway '200::/7'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 4 6t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '0 6t'

config interface 'yggdrasil'
        option device 'ygg0'
        option proto 'none'

Фаервол я не трогал. Сайт иггдрасиля говорит следующее:

While it is generally encouraged that nodes run the software locally, to provide end-to-end cryptographic sessions and participate in routing, this is not always practical. The device may not have the resources to run the software or may not be able to run user code. To that end, Yggdrasil also provides each node with a routed /64 subnet in addition to their IPv6 address. A node running Yggdrasil that acts as a router may advertise this prefix to other devices just as they would any other ordinary IPv6 network.

This may be best illustrated by example. Suppose a node has generated the address: 200:1111:2222:3333:4444:5555:6666:7777. Then the node may also use addresses from the prefix: 300:1111:2222:3333::/64 (note the 200 changed to 300, a separate /8 is used for prefixes, but the rest of the first 64 bits are the same).

On Linux, something like the following should be sufficient to advertise a prefix and a route to 200::/7 using radvd to a network attached to the eth0 interface:

    Enable IPv6 forwarding (e.g. sysctl -w net.ipv6.conf.all.forwarding=1 or add it to sysctl.conf)

    ip addr add 300:1111:2222:3333::1/64 dev eth0 or similar, to assign an address for the router to use in that prefix, where the LAN is reachable through eth0

    Install/run radvd with something like the following in /etc/radvd.conf:

    interface eth0
    {
         AdvSendAdvert on;
         AdvDefaultLifetime 0;
         prefix 300:1111:2222:3333::/64 {
             AdvOnLink on;
             AdvAutonomous on;
         };
         route 200::/7 {};
    };

Note that a /64 prefix has fewer bits of address space available to check against the node’s ID, which in turn means hash collisions are more likely. As such, it is unwise to rely on addresses as a form of identity verification for the 300::/8 address range.

пакет radvd для openwrt я не нашёл. что я делаю не так?

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

Я думаю, что иггдрасиль под OpenWrt чутка изменён, чтобы… лучше вписываться, наверное?

В любом случае, я хоть /etc/config/network правильно сконфигурировал? Я впервые в такое лезу, могу какую-нибудь ересь написать и не заметить.

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

Соре, но у меня опыта ещё меньше, чем у тебя, /etc/config/network я ни разу не настраивал.

Кстати, не знаешь, как пропинговать пиры yggdrasil и выбрать лучшие из под линукса?

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

Не знаю. Ping их жрать не хочет ни в какую.

Помню только, что приложуха из fdroid (yggdrasil - она создавала vpn, через который, в теории, должен идти yggdrasil-траффик - у меня не завелась) как-то замеряла пинг. Можешь в исходники посмотреть, может поможет.

Раз уж ты создавал темы про иггдрасиль, можешь кастануть сюда кого-нибудь, знающего OpenWrt\иггдрасиль, пжлст?

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

приложуха из fdroid как-то замеряла пинг

Именно, непонятно как это там реализовано. А java-код я врядли пойму)

приложуха у меня не завелась

У меня тоже. У неё ещё значок - буква Y? Это приложение от сообщества. А есть ещё от самого NeilAlexander, версии 0.1 - оно заработало. Правда почему-то после 20 минут пользования всё равно коннект теряет.

можешь кастануть сюда кого-нибудь, знающего OpenWrt\иггдрасиль, пжлст?

Я бы рад, но сам на форуме новичок, не знаю что как. Соре что оффтоплю тут.

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

Оно. Ща глянул в https://github.com/yggdrasil-network/crispa-android/blob/master/app/src/main/java/io/github/chronosx88/yggdrasil/PeerListActivity.kt, а там:

...
GlobalScope.launch() {
            try {
                var cp = deserializeStringList2PeerInfoSet(
                    extras!!.getStringArrayList(MainActivity.PEER_LIST)!!
                )
                for (pi in cp) {
                    var ping = ping(pi.hostName, pi.port)
                    pi.ping = ping
                }
...

Что-то мне кажется, что оно просто пингует ipv4, ни как не связанные с иггдрасилем. Возможно, потому и не завелось - пиры на самом деле медленные.

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

Вот оно:

@JvmStatic
        fun ping(hostname: String, port:Int): Int {
            val start = System.currentTimeMillis()
            val socket = Socket()
            try {
                socket.connect(InetSocketAddress(hostname, port), 5000)
                socket.close()
            } catch (e: Exception) {
                e.printStackTrace()
                print(hostname)
                return Int.MAX_VALUE
            }
            return (System.currentTimeMillis() - start).toInt()
        }
cyclbabel
() автор топика
Ответ на: комментарий от cyclbabel

В общем, моё предположение оказалось верным.

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

Если есть свободное место(а мне приходилось иметь дело с OpenWRT-железками где с этим были проблемы), могу посоветовать сначала поставить tcpdump и убедиться что трафик до указанных вами пиров ходит и они что-то вам отвечают

Дальше мои полномочия всё, с yggdrasil я не работал(имел правда небольшой опыт с cjdns)

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

wan6 нужен если у вас есть реальная связность по IPv6 с провайдером, иначе его можно удалить. option ip6gw '::1' - это в принципе лол и работать не будет(особенно так, как указано у вас в комментарии).

Раздавать /64 через SLAAC(уже не помню, выдает ли cjdns один адрес или подсеть /64, давно это было. А тут вдобавок и не cjdns, а его наследник в лице yggdrasil) вам скорее всего необходимо на LAN-интерфейсе - настройки IPv6(с удаляемого wan6) скорее всего нужно перенести именно туда.

Если это не кастомная сборка openwrt, то отдельно искать и доставлять radvd не нужно - всё необходимое для раздачи IPv6 в OpenWRT уже есть.

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

Я здесь по ygg, а не owrt. Сорян, почему-то мне не пришло уведомление.

цель: доступ к yggdrasil через роутер с любого ПК в сети, без установки клиента.

Не совсем понимаю чего хотите добиться. В какой сети, локальной? Что значит без установки клиента? В одноранговой сети каждый узел как является клиентом, так и выполняет функции сервера.

в /etc/config/network добавил

В настройке сетевого адаптера ничего менять не нужно. Правильная установка с офф сайта должна гарантировать работоспособность из коробки. ipv6 не обязательно прописывать, так как сеть отлично работает через ipv4.

там же, добавил

Адрес вам будет выдан файлом конфигурации в диапазоне 200:: с префиксом /7. Он не будет меняться, пока вы не сконфигурируете его заного yggdrasil.conf

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

Публичные пиры не нужно пинговать, потому что они работают по верх другой сети(например, интернета) и настоящий адрес у них будет другой.

Проверить подключение к пиру можно командой yggdrasilctl getPeers

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

Проверить подключение к пиру можно командой yggdrasilctl getPeers

Жаль что оно вместе с тем не пингует их, так как от пинга скорость работы в сети зависит сильно.

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

Не на все устр-ва можно установить клиент. Говорил я про это: https://yggdrasil-network.github.io/configuration.html

Advertising a Prefix

While it is generally encouraged that nodes run the software locally, to provide end-to-end cryptographic sessions and participate in routing, this is not always practical. The device may not have the resources to run the software or may not be able to run user code. To that end, Yggdrasil also provides each node with a routed /64 subnet in addition to their IPv6 address. A node running Yggdrasil that acts as a router may advertise this prefix to other devices just as they would any other ordinary IPv6 network.

This may be best illustrated by example. Suppose a node has generated the address: 200:1111:2222:3333:4444:5555:6666:7777. Then the node may also use addresses from the prefix: 300:1111:2222:3333::/64 (note the 200 changed to 300, a separate /8 is used for prefixes, but the rest of the first 64 bits are the same).

On Linux, something like the following should be sufficient to advertise a prefix and a route to 200::/7 using radvd to a network attached to the eth0 interface:

    Enable IPv6 forwarding (e.g. sysctl -w net.ipv6.conf.all.forwarding=1 or add it to sysctl.conf)

    ip addr add 300:1111:2222:3333::1/64 dev eth0 or similar, to assign an address for the router to use in that prefix, where the LAN is reachable through eth0

    Install/run radvd with something like the following in /etc/radvd.conf:

    interface eth0
    {
         AdvSendAdvert on;
         AdvDefaultLifetime 0;
         prefix 300:1111:2222:3333::/64 {
             AdvOnLink on;
             AdvAutonomous on;
         };
         route 200::/7 {};
    };

Note that a /64 prefix has fewer bits of address space available to check against the node’s ID, which in turn means hash collisions are more likely. As such, it is unwise to rely on addresses as a form of identity verification for the 300::/8 address range.

Идея была в том, чтобы весь IPv6 траффик шёл через иггдрасиль => на всех уст-вах был доступ к сети иггдрасиля. Впрочем, в последнее время было не до этого. Да и сейчас мне уже не до роутера.

cyclbabel
() автор топика
28 января 2022 г.

Добавить маршрут (network):

config route6 option interface ‘yggdrasil’ option target ‘200::/7’

Добавить префикс для PD (network):

config interface ‘yggdrasil’ option device ‘ygg0’ option proto ‘static’ list ip6addr ‘200:**********’ option ip6prefix ‘300:**********::/64’

Добавить форвадинг зоны (firewall):

config forwarding option src ‘lan’ option dest ‘yggdrasil’

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

Нужно добаваить форвадинг из lan в ygg и из ygg в lan. Последнее необязательно, тк работает contrack.

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

Удалил к хренам этот yggdrasil. Конфиг правильный, но на старте есть race-lock, срабатывает почти всегда.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.