Да, вы правы.
Используется libtoxcore:
— DHT (похожа на ту, что используется в Bittorrent протоколе) и их bootstrap узлы.
— Nat traversal.
— Криптография (libsodium).
Для создания tunX тунеля используется `/dev/tun` интерфейс.
Адрес пира назначается таким образом (есть механизм разруливания коллизий):
ip_addr = tox_pub_key | netaddr;
Пиры соединяются p2p, boostrap-node («server») используется только для того, чтобы «новый» клиент мог войти в сеть, получить адреса других узлов и их public keys. Хотя это вероятно не лучшая задумка, это пока PoC.
После установки соединения через tox транспорт, проверяется shared secret, который должен быть одинаков у участников сети. Shared secret можно указать, использую аргумент `-s`, иначе он будет сгенерирован случайным образом (часть в адресе после `:` ).
Извините, установка доволи не user-friendly, пока нету инсталлера. Все инструкции в make install:
$ export OUTFILE=toxvpn
$ export PREFIX=/usr
$ install -m 0755 $(OUTFILE) $(PREFIX)/bin/$(OUTFILE)
$ mkdir -p $(PREFIX)/lib/systemd/system/
$ setcap cap_net_admin+ep $(PREFIX)/bin/$(OUTFILE) # позволяет запускать toxvpn без админских прав
$ mkdir -p /var/run/toxvpn # здесь будет хранится IP адресов клиентов (memory mapped file)
Если не хочется разбираться, то:
$ chmod a+x ./toxvpn
$ sudo ./toxvpn -h
usage: ./toxvpn options
-h show help
-s <secret> use passed hex secret
-p <proxy> use socks|http://hostname:port> proxy server
-n <subnetwork/prefix length>
-c <address>:<secret> connect to server using tox address
-f <file> load/save settings from/to file
Запускаете "сервер". На самом деле, это что-то вроде "master-authenticator".
Starting toxvpn 0.0.988608 593a5165de7dbcef9b0d9f7cdecc03b28fecd3b3
Hostname: denis-book
Your address 6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
Listening on 33445/udp 0/tcp
[25] Added address 10.239.205.236 on "tun0"
[25] created interface "tun0" 10.239.205.236/24
[25] Connecting to "185.25.116.107:33445" DHT node
[25] Connecting to "198.46.138.44:33445" DHT node
[25] connected to DHT via UDP
^T[25] Received Tox friend request from 6B593C02E5C99192 with attached secret "3BBD925FC39BC17D1246A95465C2F7A5ABF6027CB7A7B7C44FA81DE8B2DE602D"
[25] Approved friend 0 with PK 9291C9E5023C596BBD0A2EB10840CBF5FC8A22018D6A69FB93DE73360FB17566
[25] Connected friend 0 via UDP
[25] Received membership response - toxvpn_id: A982A6C5, friendnumber: 0, flags: 1
[25] broadcast new members table. Reason: new member was added
Копируете адрес Your address = 6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
И запускаете последующих клиентов
[worker@denis-book out]$ sudo ./toxvpn -c 6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
Starting toxvpn 0.0.988608 593a5165de7dbcef9b0d9f7cdecc03b28fecd3b3
Hostname: denis-book
Your address NgYTLGXGyihxyUqcRrtvrRvTuqKsQCpHLDZmZbVxtnV1kabPHa4z:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
Listening on 33446/udp 0/tcp
[92] Added node 6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc
[92] Connecting to "198.98.51.198:443" DHT node
[92] Connecting to "198.98.51.198:443" DHT node
[92] connected to DHT via UDP
[92] Connected friend 0 via UDP
[92] created interface "" 10.239.205.229/24
[92] Received request - toxvpn_id: A982A6C5, friendnumber: 0, flags: 0
[92] Added address 10.239.205.229 on "tun1"
[92] sending a toxvpn invitation response to 0
[0x1f77848] added vpn member 10.239.205.236:0 to table
[0x1f77848] added vpn member 10.239.205.229:-2 to table
[92] broadcast new members table. Reason: new members table was received
Если у вас есть права доступа для записи в /var/run/toxvpn или запустили от root, то в /var/run/toxvpn появятся memory mapped file с таблицой ip адресов клиентов:
Минутка рекламы :). Год назад в рамках димломного проекта разработал подобное решение на основе libtoxcore. Решение изначально разрабатывалось полностью на C, но потом начал переводить на C++. Поэтому не серчайте касательно качества кода. Билды забрать можно здесь. Был бы благодарен, если бы кто-то помог портировать на Windows. Я видел, что есть devtun driver для windows, который по теории должен помочь в этом.
Если кому-то интересно, то в самой сути спора множество доводов, как за, так и против.
Вот минусы, которые приведены из вики по ссылке выше. Не переводил, дабы не исказить суть некоторых слов.
— A hard fork requires waiting for sufficient consensus.
Risk of catastrophic consensus failure.
— An emergency hard fork that can achieve consensus can be deployed on a short time period if needed.
— Orphan rate amplification, more reorgs and double-spends due to slower propagation speeds.
— European/American pools at more of a disadvantage compared to the Chinese pools
— «Congestion» concerns can be solved with mempool improvements including transaction eviction.
— No amount of max block size would support all the world's future transactions on the main blockchain (various types of off-chain transactions are the only long-term solution)
— Fast block propagation is either not clearly viable, or (eg, IBLT) creates centralised controls.
Bitcoin сообщество раскололось на тех, кто поддерживает Bitcoin Core (1mb) и Bitcoin Classic hardfork (>1mb). Команда Bitcoin Core выпустила «расширение» BIP-141, которое в некоторое в некоторой степени должно решить проблемы, связанные с количеством транзакций помещаемых в 1MB блок. Сам я не изучал это «предложение по улучшению», поэтому поправьте, если я не прав.
Или, как вариант, keepassx, только вопросы синхронизации базы между устройствами и удобной интеграции с браузерами для автозаполнения остаются открытыми.
syncthing.net не пробовал, но обязательно попробую. Беглый взгяд на оффсайт — нету мобильных версий. Так же нету интеграции с системой (контекстное меню в WinExplorer и т.д, хотя сам пользуюсь GNU Linux, где в Синке этого тоже нету). Возможно, со временем все появится.
Используется libtoxcore:
— DHT (похожа на ту, что используется в Bittorrent протоколе) и их bootstrap узлы.
— Nat traversal.
— Криптография (libsodium).
Для создания tunX тунеля используется `/dev/tun` интерфейс.
Адрес пира назначается таким образом (есть механизм разруливания коллизий):
Пиры соединяются p2p, boostrap-node («server») используется только для того, чтобы «новый» клиент мог войти в сеть, получить адреса других узлов и их public keys. Хотя это вероятно не лучшая задумка, это пока PoC.
После установки соединения через tox транспорт, проверяется shared secret, который должен быть одинаков у участников сети. Shared secret можно указать, использую аргумент `-s`, иначе он будет сгенерирован случайным образом (часть в адресе после `:` ).
Если у вас остались вопросы — задавайте!
P.S. Извините, промахнулся.
На данный момент последний билд находится по ссылке https://gitlab.com/denis4net/toxvpn/builds/1166411/artifacts/file/toxvpn, если мне не доверяете, то можете собрать сами.
Makefile
и.gitlab-ci
вам в помощь.Извините, установка доволи не user-friendly, пока нету инсталлера. Все инструкции в
make install
:Если не хочется разбираться, то:
Запускаете "сервер". На самом деле, это что-то вроде "master-authenticator".
Копируете адрес
Your address
=6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
И запускаете последующих клиентов
Если у вас есть права доступа для записи в
/var/run/toxvpn
или запустили от root, то в/var/run/toxvpn
появятся memory mapped file с таблицой ip адресов клиентов:Ну и
Маленький ликбез. Адрес узла состоит из двух частей:
Буду благодарен за любой фидбэк, pullrequestы и ревью безопасности архитектуры.
Вот минусы, которые приведены из вики по ссылке выше. Не переводил, дабы не исказить суть некоторых слов.
Bitcoin сообщество раскололось на тех, кто поддерживает Bitcoin Core (1mb) и Bitcoin Classic hardfork (>1mb). Команда Bitcoin Core выпустила «расширение» BIP-141, которое в некоторое в некоторой степени должно решить проблемы, связанные с количеством транзакций помещаемых в 1MB блок. Сам я не изучал это «предложение по улучшению», поэтому поправьте, если я не прав.