Для включения в состав ветки net-next, на основе которой формируется начинка сетевой подсистемы для будущего выпуска ядра Linux, предложен (https://lkml.org/lkml/2018/10/6/137) набор патчей с седьмой версией VPN-интерфейса от проекта WireGuard (https://www.wireguard.io/). Проект предлагает минималистичную реализацию VPN на основе современных методов шифрования, очень быструю, простую в использовании и лишённую усложнений. WireGuard развивается с 2015 года, прошёл аудит и формальную верификацию (https://www.wireguard.com/formal-verification/) применяемых методов шифрования. VPN уже хорошо зарекомендовал себя в ряде крупных внедрений, обрабатывающих большие объёмы трафика.
В WireGuard применяется концепция маршрутизации по ключам шифрования, которая подразумевает привязку к каждому сетевому интерфейсу закрытого ключа и применение для связывания открытых ключей. Обмен открытыми ключами для установки соединения производится по аналогии с SSH. Для согласования ключей и соединения без запуска отдельного демона в пространстве пользователя применяется механизм Noise_IK из Noise Protocol Framework (http://noiseprotocol.org/), похожий на поддержание authorized_keys в SSH. Передача данных осуществляется через инкапсуляцию в пакеты UDP. Поддерживается смена IP-адреса VPN-сервера (руминг) без разрыва соединения и автоматической перенастройкой клиента.Для шифрования используется (https://www.wireguard.io/protocol/) потоковый шифр ChaCha20 (http://cr.yp.to/chacha.html) и алгоритм аутентификации сообщений (MAC) Poly1305 (http://cr.yp.to/mac.html), разработанные Дэниелом Бернштейном (Daniel J. Bernstein (http://cr.yp.to/djb.html)), Таней Ланге
(Tanja Lange) и Питером Швабе (Peter Schwabe). ChaCha20 и Poly1305 позиционируются как более быстрые и безопасные аналоги AES-256-CTR и HMAC, программная реализация которых позволяет добиться фиксированного времени выполнения без задействования специальной аппаратной поддержки. Для генерации совместного секретного ключа применяется протокол Диффи-Хеллмана на эллиптических кривых в реализации Curve25519 (http://cr.yp.to/ecdh.html), также предложенной Дэниелом Бернштейном. Для хэширования используются алгоритм BLAKE2s (RFC7693) (https://www.opennet.ru/opennews/art.shtml?num=35676).Кроме применения быстрых алгоритмов для повышения производительности было решено отказаться от использования предоставляемого ядром crypto API, который достаточно медленный из-за дополнительной буферизации. Собственные реализации примитивов ChaCha20, Poly1305, Blake2s и Curve25519 вынесены в отдельную библиотеку Zinc (https://www.opennet.ru/opennews/art.shtml?num=49064), которая может дополнить текущий crypto API и предоставить основу для будущей переработки.
При тестировании (https://www.wireguard.com/performance/) производительности WireGuard продемонстрировал в 3.9 раза более высокую пропускную способность и в 3.8 раз более высокую отзывчивость, по сравнению с OpenVPN (256-bit AES c HMAC-SHA2-256). По сравнению с IPsec (256-bit ChaCha20+Poly1305 и AES-256-GCM-128) в WireGuard наблюдается небольшое опережение по производительности (13-18%) и снижению задержек (21-23%).URL: https://lkml.org/lkml/2018/10/6/137
Новость: https://www.opennet.ru/opennews/art.shtml?num=49401
Что-то эта штука не выглядит как то, что должно быть в ядре. Они бы ещё туда аудиоплеер запихнули и парсер TeX.
Оно как раз и обгоняет OpenVPN за счёт того, что выполнено в виде модуля ядра. Теперь проект достиг зрелости (Линус, помню, восхищался тем, как минималистично и красиво написан код).
Если аудиоплеер впихнуть в ядро, то он тоже будет обгонять юзерспейсные плееры. Но это не повод для впихивания.
Аудиоплееры не страдают от "тормознутости" и не нагружают заметно процессор. А вот WireGuard позволяет более полно утилизировать пропускную способность и хорош тем, что снижает нагрузку на всяких там роутерах, где процессоры не особо мощные.
А что он забыл на роутерах?
Вломился вот и спрашивает "что там про меня Crazy Alex думает?"
> А что он забыл на роутерах?Действительно, VPN на роутере. Что может быть глупее? Разве что фаервол на роутере.
OpenVPN на роутере - это 10 mbps, потому что армовая дрянь, которая там стоит, не может в математику.
Не ARM, а MIPS. OpenVPN такая дрянь, что даже на мощных x86 гигабит не тянет.
Современные ARM таки и с openvpn могут довольно много. Однако в целом openvpn давно превратился в энтерпрайзный переросток, с кучей дурных проблем. И таки он очень тормознут.А если
> По сравнению с IPsec...то wireguard настраивать проще в 20 раз, потому что ipsec явно делали инопланетяне :)
Подключать роутер в качестве клиента. Либо поднять на роутере сервер и подключаться к своему домашнему интернету из публичных мест.Это весьма распространённый сценарий.
А на самом деле, зачем?
Обычно впн идет как приложение для виндового трея.
>Обычно впн идет как приложение для виндового трея.Куда идёт?
А куда еще засунуть vpn, чтобы на всех домашних устройствах не испытывать последствий от действий роскомнадзора?
> А что он забыл на роутерах?Роутер как бы самое логичное место для того чтобы на нем vpn запустить. Он всегда активен, всегда раздает интернет другим. Его можно usp'ом подпереть хоть на неделю. Так что можно 1 раз настроить впн на 1 устройстве, которое собой прикроет остальных. И будет работать как батарейка энержайзер, не требуя особого внимания к себе.
> Если аудиоплеер впихнуть в ядро, то он тоже будет обгонять юзерспейсные плееры. Но это не повод для впихивания.Ту часть плеера, которая критична по скорости, уже давно впихнули. Слышали про такую штуку — ALSA?
Будешь рассуждать про отсутствие поводов для впихивания, когда тебе придется объяснять начальству, почему после развертывания впн скорость передачи в разы меньше по сравнению с пропускной способностью арендованного канала. Впн не для обхода блокировок придумали, так-то. Ну и про ALSA тут уже написали.
Вы передаёте в аудиоплеер гигасы данных в секунду? Зачем?
А то, что в ядре есть модули для CIFS и NFS — достаточно прикладных штук, не смущает?
Никто же не заставляет компилирировать или подключать данный модуль.
>(Линус, помню, восхищался тем,
> как минималистично и красиво написан код).Пральна, т-щ Линус!, нужно втащить в ядро бОООльше минималистичного, а то оно кокраснело, разбухло и облотварилось!
> Линус, помню, восхищался тем, как минималистично и красиво написан кодНу не прям чтобы восхищался, он просто заметил что оно не такое дерьмо, как OpenVPn и подобные
>Линус, помню, восхищался тем, как минималистично и красиво написан кодТаня же писала код :)
Ну и Таня Ланге - профессор в нидердланском университете, на страничке опубликован её открытый GPG ключ для переписки, пишет код сама, студетов обучает криптологии.
Интересно, в России есть хоть один профессор с кафедры "защита информации" или "информационная безопасность", который на своей страничке свой открытый GPG ключ опубликовал, да ещё и код пишет и главное публикует под открытой лицензией?
> в России есть хоть один профессорНет. Опровергните, тогда изменю мнение, основанное на обучении в бауманке.
да я тоже думаю, что нет таких.
Полностью согласен с Вами, гражданин. Незачем вот это повсеместное шифрование, оно только все осложняет! Если вам нечего скрывать, то и шифроваться не надо.
А чего вы тогда свою переписку не выкладываете в Интернет, чтобы все могли её читать?
> А чего вы тогда свою переписку не выкладываете в Интернет, чтобы все
> могли её читать?чтобы враги государственного строя и вражеские шпионы не могли ее прочитать, разумеется.
и вредные провокаторы тоже (намек уяснил?)
> Что-то эта штука не выглядит как то, что должно быть в ядре.
> Они бы ещё туда аудиоплеер запихнули и парсер TeX.Ядро станет еще более монолитным.
Вот уж чего надо выкинуть из ядра, так это долбаный ipsec с его нагромождениями слоев на пустом месте.
А wireguard прекрасен.
да-да, ведь никуда кроме распоследней версии линукса гордому админу локалхоста подключаться не надо.И никого кроме гордых админов (а то начинаются, внезапно, особенности, что список доступного через vpn, ну надо же, не для всех пользователей должен быть один и тот же) он на свой локалхост тоже не пустит. Контроль траффика хотя бы в виде "приходил Петров с 11:02 до 12:23, ip=..." - причем, разумеется, на внешнем по отношению к тому, на что приходил, устройстве - тоже не нужен, джентльмены верят на слово.
Задачи внезапно разные. Мне, скажем, на перечисленные задачи по барабану, нерелевантны. А для построения туннеля между серверами в разных датацентрах wg подходит прекрасно, для задач разработки тоже.Насчет выкинуть, я, конечно, утрирую, но если уж в ядре есть ipsec, то wg тем более заслуживает в нем быть, и это не только мое мнение:
https://lists.openwall.net/netdev/2018/08/02/124
From: Linus Torvalds
Can I just once again state my love for it and hope it gets merged
soon? Maybe the code isn't perfect, but I've skimmed it, and compared
to the horrors that are OpenVPN and IPSec, it's a work of art.
> Задачи внезапно разные.внезапно, да. Поэтому я может и буду где-то в очень узкоспециальных (строго линyпс-с-линyпсом, ручные настройки ибо протокол под них заточен, зачем-то нужно шифрование а не, скажем, банальный gre) местах это использовать, но это вот - "может", а ipsec - точно буду.
> Насчет выкинуть, я, конечно, утрирую, но если уж в ядре есть ipsec, то wg тем более
> заслуживает в нем бытьну тут я согласен ,что белки-истерички, верещащие что добавлять никак нельзя, а то ж ведро лопнет, не выдержав увеличения на (сколько там - десятая процента кода наберется?) всполошились совершенно напрасно, но и чудес, покамест, не ожидается.
Только вот беда, реально в ойписеке ничего кроме psk с предопределенными пирами толком не работает.
И работать не может ибо спецификации протокола неполны и бестолковы.
> Только вот беда, реально в ойписеке ничего кроме psk с предопределенными пирами толком не
> работает.мой корпоративный vpn с xauth с сертификатом и отдельно mschap2 поверх, доступный из любой точки на планете, до которой доходят esp пакеты - икнул, но, к счастью, не отвалился, читая эту фигню.
ну да, с линукс-клиентом для него не очень. хотя отдельные успехи и бывали.
но и в очередной раз туннелить "весь интернет" в udp - как-то не выглядит хорошим универсальным решением для всех и на все времена. Скорее, очередным более-менее удачным костыликом :-(
Почему с tinc'ом нет сравнений? Хотя, полагаю он будет где-то около openvpn, т.к. юзерспейсный. Но всё же ...
По производительности - да, Вы правы, не очень из-за юзер-пейса. По простоте настройки - wg даже проще, как мне кажется.
Производительность это хорошо, но не главное. Главное - это аудит самих алгоритмов шифрования/авторизации на предмет хорошо замаскированных закладок. А его, боюсь, никто не осилит
Судя по новости сделали.
Хотя надо бы посмотреть отчет и кто делал.
Да бог с ними - с алгоритмами.
Вполне достаточно будет взбрыка на какой-нибудь особым образом битый пакет, после чего этот мегакомбайн начнет забирать 32Гб. Ну для тех систем, что не смогут отдать йадру 32 гига, просто свалятся до deny of service, а в тех что смогут, там удаленное выполнение кода с ядренными привилегиями (да еще поди в обход огненной стены). :)
https://www.wireguard.com/formal-verification/
> https://www.wireguard.com/formal-verification/...""has undergone all sorts of formal verification, covering aspects of ""...
Надо просто немного _подождать_,
https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=wireguard
https://security-tracker.debian.org/tracker/source-package/w...
...
От этого никто не застрахован, конечно.
Но что будет на порядки меньше, чем в ipsec, это очевидно хотя бы из объема и качества кода. :)
> Передача данных осуществляется через инкапсуляцию в пакеты UDP.А если UDP заблокирован?
>> Передача данных осуществляется через инкапсуляцию в пакеты UDP.
> А если UDP заблокирован?Это поможет, привет из Китая
https://github.com/wangyu-/udp2raw-tunnel
https://github.com/wangyu-/UDPspeeder
"а если интернет вообще отключили?"примерно так же.
> А если UDP заблокирован?В смысле, добрые админы выпускают наружу только через HTTP-прокси? Тогда живите с OpenVPN, он умеет под HTTPS косить. Но мееееедленный, как и положено юзерспейсу.
> В смысле, добрые админы выпускают наружу только через HTTP-прокси? Тогда живите с
> OpenVPN, он умеет под HTTPS косить. Но мееееедленный, как и положено"this http method does not allowed". Будешь ты тут мне трудовую дисциплину нарушать!
> "this http method does not allowed".Для таких умников есть тунели которые в HTTP запросах TCP пропихивают, чо :). А на дисциалину клали все уж давно с своими стограм-телеграмами на мобильниках...
а где будет этот впн если оба или один из пиров за натом?
Если только один пир за натом то никаких проблем не будет если на нем включить опцию persistent-keepalive.
Для таких случаев есть ZeroTier: https://www.reddit.com/r/linux/comments/7c0zkw/zerotier_open.../
https://peervpn.net
> https://peervpn.netНа фоне WireGuard он, мягко говоря, так себе.
1) Примерно 300 кило кода, на все случаи жизни. Счастливого аудита! Хотя кто ж исходники читает то?
2) Интересный код. Ну вот peermgt.c допустим. Код не влезает на экран по ширине. Я все понимаю, но экран 30". И этого мало для комфортного чтения сорца? В линух подобный код по счастью все же не берут.
3) OpenSSL в зависимостях. Ну и все дыры в нем - ваши. Хотя, если повезет, то только половина из них.
4) Все самые современные технологии - на месте. Вот вам тормозной как трактор RSA. По стойкости один фиг с 25519 эллиптикой, плюс-минус, зато по скорости...
https://www.freelan.org
> https://www.freelan.orgА это вообще кошмар какой-то, плюсатый, с бустом, скунсом, и дюжиной огромных либ вываленых прямо в репу прожЕкта. Глядя на вот что-то такое и понимаешь что имел в виду Торвальдс говоря "work of art" про сабж. По сравнению с вот этим - он и правда work of art!!!
Было бы отлично, но ситуацию усугубляет то, что на впсках один хрен дистры предлагаются с ядром куда древнее.
Ну, если уж так сильно хочется - выбираем kvm/xen виртуализацию и собираем ядрышко ручками. Если хотим впсочку за 50 рублей... ну, упс.
Хм... А хотя про репы я и не подумал, а в репах наверняка будет все...
> Если хотим впсочку за 50 рублей... ну, упс.А в чем проблема найти full virt за сравнимые деньги, в пределах $1-2? Их есть. Так что уже вполне можно отправить openvz туда где ему место - на свалку истории.
> Было бы отлично, но ситуацию усугубляет то, что на впсках один хрен дистры предлагаются с ядром куда древнее.VPS на базе OpenVZ? Да там пофиг, какое ядро, все равно без высочайшего позволения модули загружать не получится.
Это проблема тех ВПСок, которыми ты пользуешься, не?
На нормальных ВПСках тебе дают возможность творить с системой что хочешь, нужно ядро свежее поставишь, а вообще сейчас прекрасно dkms'ом модуль WireGuard собирается и работает.
Подтверждаю, нормальный VPSки FTW!
> Подтверждаю, нормальный VPSки FTW!И главное они уже давно стоят вполне вменяемых денег. Многие хостеры с кривым ovz за это еще и дерут больше чем многие другие за full virt, если кто случайно не заметил. А на full virt вы можете вкатить хоть ядро которое вы из git самолично собрали, если вам так зачем-то надо.
Производительность у WireGuard отличная, особенно в сравнении с OpenVPN, который как ни тюнингуй, все равно как будто упирается в потолок производительности одного ядра процессора.
Хотелось бы все же и поддержку AES, чтобы получить выгоду ещё и от аппаратного ускорения шифрования.
Да, я тоже уже хотел свой роутер выкидывать и брать новый, ибо OpenVPN плохо тянет.
Перешёл на WireGuard - проц почти не грузит, скорость хорошая.
Видимо роутер я пока менять не буду. :)
"скорость хорошая" это сколько, если не секрет? И на каком железе?
> Перешёл на WireGuard - проц почти не грузит, скорость хорошая.Там и подборка алгоритмов нормальная и в ядре к тому же. Понятное дело что openvpn без шансов. Торвальдс зря словами типа "work of art" раскидываться не будет.
Внезапно, WireGuard — тоже однопоточный. Не так давно обходил сей прескорбный факт сборкой tap+bond.
Когда завезут в микротик, джунипер, аарис и циску?
Когда они асилят нормальные ОСи, а не самописные костыли.
В общем исходники-то открыты, всё дело за индусокодерами стало.
А нафига он в кошках-то? Там своя реализация VPN отличная.
Ох, как сказать отличная. Насколько понимаю в этом wireguard накосячить можно мало где. А вот с цисками... Если с другой стороны не подконтрольное оборудование и сидит человек который настройки делает, и не понимает что делает - велика вероятность многочасового пердоленья.
> Если с другой стороны не подконтрольное
> оборудование и сидит человек который настройки делает, и не понимает что
> делает - велика вероятность многочасового пердоленья.В таких случаях просто даем ему готовый конфиг. А вообще если настройкой любого професионального оборудования занимается человек, который не понимает что делает - результат немного предсказуем.
Более того - простота настройки для человека, не понимающего что он делает, далеко не всегда хорошо - обычно это кончается неслабой дырой в безопасности... :) Что доставляет кучу лулзов, особенно в случае если это касается процессов, исполняемых в пространстве ядра...
Естественно ты всё говоришь как надо. Вот только жизнь иногда умеет шутить. И просто выдача готового конфига ничего не решает. По дебагам вылавливается что что-то не то люди делают с другой стороны. По словам то конфиг применил, да.
Проблема не техническая в данном случае. А чисто организационная. Но там уже другие вещи играют роль во всем этом бардаке. И вот максимальное упрощение принесет только плюсы. А на безопасность другой стороны с прибором. Требуемую маленькую песочницу прокинули, и хватит.
> Насколько понимаю в этом wireguard накосячить можно мало где. А вот с цисками...с цисками в минимальном варианте - около 15 строчек конфига (около пяти если все сделать вообще через задницу - в принципе, и работать будет), если избегать обожаемого недоинженерами бесполезного мусора в виде dmvpn. Вряд ли ты уложишься в меньшее для wireгада.
> сидит человек который настройки делает, и не понимает что делает - велика вероятность
> многочасового пердоленья.ровно то же самое. Только этот человек еще и будет в интуитивно-приятном нетворкмакакере тыкать наугад в галки, а ты будешь пытаться по его описаниям угадать, что он видит на экране и имеет ли это вообще отношение к сети, или это у него порнобаннер вылез поверх нужного окна и этот дятел не видит разницы.
Или еще хуже - у тебя rhel, у него бубунточка, сеточку настраивает за него интуитивно-приятный скрипт без документации, о существовании которого ты узнаешь вот сейчас, и пойдешь, не знаю уж - убунту на виртуалке накручивать, чтобы вообще понять что это за нёх?
>у тебя rhel, у него бубунточка, сеточку настраивает за него интуитивно-приятный скрипт без документацииУгу, или федорка, где в 100500 версии лёниного пoдeлия опять и снова все переделали, а документация - в модно-молодежных бложеках и ютупчегах.
> оборудование и сидит человек который настройки делает, и не понимает что
> делает - велика вероятность многочасового пердоленья.Циска тебе априори не подконтрольна - сорцов у тебя нет, так что предлагается верить джентльменам на слово. И если вдруг NSA и прочим Equation карта как поперла, как поперла - ну вот так вот, да.
А что такой "аарис"?
Лично мне он понравился. Заводится "влёт", есть в OpenWRT / debian / Ubuntu / etc. Использую несколько месяцев, доволен.
Помогите разобраться в его настройке, скорее всего в правилах iptables.На сервере:
[Interface]
Address = 192.168.13.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s10 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s10 -j MASQUERADE
PrivateKey =[Peer]
PublicKey =
AllowedIPs = 192.168.13.1/32[Peer]
PublicKey =
AllowedIPs = 192.168.13.2/32
На клиенте:
[Interface]
Address = 192.168.13.2/24
PrivateKey =[Peer]
PublicKey =
Endpoint = ilya.pp.ua:51820
AllowedIPs = 192.168.13.1/24
PersistentKeepalive = 25Сервер имеет реальный IP - клиент нет, и с помощью этого конфига я могу подключаться с сервера к клиенту по ssh 192.168.13.2, что мне и требовалось.
В данный момент, как мне сейчас и нужно, через vpn идут запросы только для сети 192.168.13.0/24.
Вопрос, а как изменить конфиг так, чтобы через vpn с клиента шёл весь трафик через сервер, а не только 192.168.13.0/24 ?
-AllowedIPs = 192.168.13.1/24
+AllowedIPs = 0.0.0.0/0
Если я так делаю. то интернет на клиенте вообще перестаёт работать и у меня не пингуется ни одна сеть кроме 192.168.13.0/24 и DNS-ников.
> Если я так делаю. то интернет на клиенте вообще перестаёт работать и
> у меня не пингуется ни одна сеть кроме 192.168.13.0/24 и DNS-ников.Покажите iptables-save и ip ro sh на сервере.
> ip ro shdefault via 192.168.0.1 dev enp0s10 proto dhcp src 192.168.0.2 metric 10
192.168.0.0/24 dev enp0s10 proto kernel scope link src 192.168.0.2
192.168.0.1 dev enp0s10 proto dhcp scope link src 192.168.0.2 metric 10
192.168.13.0/24 dev wg0server proto kernel scope link src 192.168.13.1> sudo iptables-save
делай раз - apt purge ufw - все равно ты им пользоваться не обучен. Или что у тебя там стоит такое, понасоздававшее автоматический нечитаемый мусор?делай два - в расчищенном от интуитивно-приятного мусора фильтре
iptables -L FORWARD
(я почистил за тебя)
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#а до этих строчек управление уже никогда не дойдет
-A FORWARD -i wg0server -j ACCEPT
-A FORWARD -o wg0server -j ACCEPT
ping, кстати, у тебя при этом должен работать - это единственное, что разрешено (причем - неправильно) в твоем интуитивно-приятном файрволе.
> -A FORWARD -j REJECT --reject-with icmp-host-prohibited
> #а до этих строчек управление уже никогда не дойдет
> -A FORWARD -i wg0server -j ACCEPT
> -A FORWARD -o wg0server -j ACCEPTБлагодарю!
Среди этого мусора я и впрямь это не разглядел.> apt purge ufw ...
У меня не Ubuntu с ufw.
У меня openSUSE с firewalld.
да я в их сортах не того... как вижу проделки интуитивно-приятных, так и удаляю - еще не хватало терять время, изучая "тут точно-точно просто пустое правило, или я не заметил чего""одна windows у меня уже и так есть". Правда, все идет к тому, что кругом будет "как в windows".
> "одна windows у меня уже и так есть". Правда, все идет к
> тому, что кругом будет "как в windows"."" В инторнетах объявлен год Linux "как в windows". Новости в 11! ""
"" В инторнетах объявлен год Linux "как в windows"
ГООООД? Are you serious about that? Лет десяток уже, не меньше, линyпс бодро шлепает ластами в этом единственном направлении.
> "" В инторнетах объявлен год Linux "как в windows"
> ГООООД? Are you serious about that? Лет десяток уже, не меньше, линyпс
> бодро шлепает ластами в этом единственном направлении.Вот именно! Теперь пора смеяться над теми, кто... Вот сам пару раз попользовал это "они делают из здесь как в" -- и заметил, что-то как-то "как у всех" шуточка. Непорядок.
Проконсультируйте меня по iptables, пожалуйста.
Нужна ли вообще эта строчка в конце правил?
-A FORWARD -j REJECT --reject-with icmp-host-prohibitedПравильней будет разобраться почему она там появляется и сделать так, чтобы она не прописывалась или просто в PostUp вместо -A заменить -I ?
> Нужна ли вообще эта строчка в конце правил?нет, потому что это неправильная строчка. Правильная выглядит как-то так:
-A FORWARD -p tcp -j REJECT --reject-with icmp-admin-prohibited
-A FORWARD -j DROP (или -P FORWARD DROP)(совсем правильная - отдельное правило для udp с rate-limiter)
и этими строчками должен всегда кончаться набор правил для INPUT и FORWARD.
но я все же рекомендую прочитать man iptables, и научиться их писать самому, без всяких интуитивно-приятных уродцев, которые даже gratious-deny не умеют, оказывается, правильно реализовать.
> Правильней будет разобраться почему она там появляется
она там появляется, потому что без нее твой файрвол превращается в тыкву, начиная форвардить что попало куда попало или становится крайне трудноотлаживаемым (если таки -P DROP), и добавляет ее туда твой firewalld. После чего ты лезешь поверх него руками, что тоже неправильно.
Нужно либо уж привыкать жить "как в винде", и искать как настраивается firewalld не лазя в iptables в обход инструмента управления, либо таки научиться ими пользоваться. Второе может оказаться зряшной тратой времени, потому что завтра их таки выпилят и заменят неадекватным уродцем или даже двумя сразу. К тому же у нас еще есть доскер и куча другого интуитивно-приятного хлама, лазящего в фильтры в обход админа системы, потому что их авторы обоснованно считают его тупырем, неспособным их настроить руками.
С -I - да, будет работать, но не понимая что делаешь, ты можешь понаделать дырок. А понимания у тебя, как я погляжу, нет.
> У меня не Ubuntu с ufw.
> У меня openSUSE с firewalld.И что характерно - оба этих "дружественных" креатива годны только под деинсталл. Лучше все же RTFMнуть про нормальный айпитаблес. Хотя, конечно, парни в индии строят дома как-то так: берут несколько фанерок, сверху кусок шифера - обана, дом готов. Вот firewalld и ufw - очень в духе такого софтостроя.
>> У меня не Ubuntu с ufw.
>> У меня openSUSE с firewalld.
> И что характерно - оба этих "дружественных" креатива годны только под деинсталл.И тут мы понимаем, какой дизигн-фичур был _решающим_ в "успехе" system-d! :-D
> Лучше все же RTFMнуть про нормальный айпитаблес. Хотя, конечно, парни в
А потом RTFM-нуть в норм.генерато правиля для.
А перед этим таковой найти... //я firehol взял, но давно это было> индии строят дома как-то так: берут несколько фанерок, сверху кусок шифера
> - обана, дом готов. Вот firewalld и ufw - очень в
> духе такого софтостроя.Ну, если Вы так говорите...
То-есть на клиенте разрешен только маскарад без выхода в сеть?
Если сделать то, что указано выше, разрешить клиенту полностью ходить через vpn, то интернета всё равно нет не нём.
Как и нет вменяемой инструкции по настройке на офф сайте, к сожалению.
https://technofaq.org/posts/2017/10/how-to-setup-wireguard-v.../https://linode.com/docs/networking/vpn/set-up-wireguard-vpn-...
пользуйся одним или другим мануалом. SaveConfig опцию не используй из-за нее вечные траблы с AllowedIPs. Лучше вручную.
Благодарю за ссылки.
Первая похожая на арчевиковскую, по которой я настраивал,
https://wiki.archlinux.org/index.php/WireGuard#Setup_a_VPN_s...
только там немного другие команды iptables для ipv6.Попробовал прописать
net.ipv6.conf.all.forwarding = 1
в добавок к
net.ipv4.ip_forward = 1
в /etc/sysctl.conf
Изменил PostUp/PostDown на эти, даже вместо %i принудительно прописал wg0server, (SaveConfig НЕ использовал) но результат тот же, при AllowedIPs = 0.0.0.0/0 пропадает интернет на клиенте и прингуются только DNS-ники и 192.168.13.0/24.
Видимо что-то с маскарадингом на сервере не так, но что именно не могу определить. :-(
> То-есть на клиенте разрешен только маскарад без выхода в сеть?Клиент подключен к интернету, только не имеет выделенного реального IP.
sysctl net.ipv4.ip_forward=1
Это у меня прописано и на сервере и на клиенте.
На клиенте не надо.
Вроде выглядит правильно (за исключением уже упомянутого 0/0 на клиенте).
А UDP точно по дороге не режется?
> А UDP точно по дороге не режется?Если я могу зайти по ssh на 192.168.13.1 (с клиента на сервер) и наоборот, то предполагаю что не режется, хотя не знаю как это проверить.
Мне кажется что-то с iptables не в порядке и проброс интернета на vpn-сервер не происходит.
А wg что выдает? Туннель-то установлен?Если нет, то попробуйте настроить безо всяких wg-quick и прочих systemd, ручками - прямо как на официальном сайте в демонстрационном видеоролике, пока туннель сам по себе не заработает. А уж дальше можно разбираться с форвардингом, в настройке iptables для wireguard нет ничего особенного.
А, еще проверьте таблицы маршрутизации, у меня как-то раз networkmanager выпердривался и лез куда его не просили.
> А wg что выдает? Туннель-то установлен?sudo wg
interface: wg0
public key:
private key: (hidden)
listening port: 54589
fwmark: 0xca6cpeer:
endpoint: 178.219.173.13:51820
allowed ips: 0.0.0.0/0
latest handshake: 33 seconds ago
transfer: 6.15 KiB received, 43.07 KiB sent
persistent keepalive: every 25 secondsКонечно установлен, иначе бы сеть 192.168.13.0/24 не пинговалась, а так я по ssh захожу по ней.
> Если нет, то попробуйте настроить безо всяких wg-quick и прочих systemd, ручками - прямо как на официальном сайте
Без Quick/systemd настраивать не пробовал, но не думаю что это что-либо изменит, но всё же попробую.
На оффсайте абсолютно идиотская конфигурация, где 2 пира и так находящиеся уже в одной сети, накидывают, зачем-то, ещё и vpn сверху.
Если бы у меня на всех машинах был бы выделенный реальник, то мне бы и vpn не нужен был.
В любом случае я не смогу повторить эту конфигурацию, так как у меня машины не могут без vpn видеть друг друга в обе стороны.NetworkManager у меня удалён, сетью рулит systemd-networkd.
Совсем без systemd тоже не получится.Вот таблицы маршрутизации читать и проверять я не умею, к сожалению. :-(
В последних релизах wg-quick стал творить странное и прописывать в тэйбл 0xca6c роутинг, загляни туда ip r s table all
У меня все прекрасно с инетом через WG-сервер, никаких проблем нет, к сожалению я сейчас без своего ноута и в другой стране, не могу тебе показать конфиги с клиента и роутинг, если подождешь неделю, пока я вернусь, то все свои конфиги дам
Благодарю Вас за желание мне помочь! :-)
Вроде разобрался, проблема была в firewalld и последнем правиле,
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
отбрасывающим все пакеты, и вместо iptables -A нужно было мне прописывать iptables -I.Хотя странно что, судя по гуглению, кроме меня об него никто не спотыкался.
На сервере сделайте так:/etc/wireguard/wg0.conf:
Interface]
PrivateKey = xxxxxxxxxxxxxx
ListenPort = PortNo
Table = off
PostUp = /etc/wireguard/wg_firewall.sh %i start
PostDown = /etc/wireguard/wg_firewall.sh %i stop/etc/wireguard/wg_firewall.sh:
#!/bin/bash
exec >> /tmp/wg_firewall.sh.log 2>&1
set -x
if [ $# -ne 2 ]; then
echo "No interface given. Usage: $0 <int> [start|stop]" >&2
exit 1
ficase "$2" in
start)iptables -t nat -I POSTROUTING -s 192.168.13.0/24 ! -d 192.168.13.0/24 -j MASQUERADE
iptables -I FORWARD -i $1 -o eth0 -j ACCEPT
iptables -I FORWARD -o $1 -i eth0 -j ACCEPT
iptables -I FORWARD -i $1 -o $1 -j ACCEPT
;;
stop)
iptables -t nat -D POSTROUTING -s 192.168.13.0/24 ! -d 192.168.13.0/24 -j MASQUERADE
iptables -D FORWARD -i $1 -o eth0 -j ACCEPT
iptables -D FORWARD -o $1 -i eth0 -j ACCEPT
iptables -D FORWARD -i $1 -o $1 -j ACCEPT
;;
esac
Названия интерфейсов поправьте, если нужно.
Разумеетсся, нужно включить forwarding (у Вас включен).На клиенте заворачиваете или всё через ip route replace default, или выборочно через ipset + iptables + ip rule.
Большая благодарность!
Заработало! :-)> sudo cat /tmp/wg_firewall.sh.log
+ '[' 3 -ne 3 ']'
+ case "$3" in
+ iptables -t nat -I POSTROUTING -s 192.168.13.0/24 '!' -d 192.168.13.0/24 -j MASQUERADE
+ iptables -I FORWARD -i wg0server -o enp0s10 -j ACCEPT
+ iptables -I FORWARD -o wg0server -i enp0s10 -j ACCEPT
+ iptables -I FORWARD -i wg0server -o wg0server -j ACCEPT> sudo iptables-save | grep FORWARD
-A FORWARD -i wg0server -o wg0server -j ACCEPT
-A FORWARD -i enp0s10 -o wg0server -j ACCEPT
-A FORWARD -i wg0server -o enp0s10 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_IN_ZONES_SOURCE
-A FORWARD -j FORWARD_IN_ZONES
-A FORWARD -j FORWARD_OUT_ZONES_SOURCE
-A FORWARD -j FORWARD_OUT_ZONES
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD_IN_ZONES -g FWDI_public
-A FORWARD_OUT_ZONES -g FWDO_publicДело было в маршрутизации, как я и думал.
Теперь нужно разобраться кто виноват firewalld со своим
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
и нужно удалить где-то эту строку, или всё же прописать строки из вашего скрипта в PostUp и PostDown ?
А чем отличаются Ваши правила
iptables -t nat -I POSTROUTING -s 192.168.13.0/24 ! -d 192.168.13.0/24 -j MASQUERADE
iptables -I FORWARD -i wg0server -o enp10s0 -j ACCEPT
iptables -I FORWARD -o wg0server -i enp10s0 -j ACCEPT
iptables -I FORWARD -i wg0server -o wg0server -j ACCEPTОт правил из предложенного для WireGuard конфига, в которых -A заменены на -I
iptables -I FORWARD -i wg0server -j ACCEPT
iptables -I FORWARD -o wg0server -j ACCEPT
iptables -t nat -I POSTROUTING -o enp10s0 -j MASQUERADEИ какие лучше применять, если они оба работают?
> И какие лучше применять, если они оба работают?Лучше применять те, которые понимаешь!
>> А UDP точно по дороге не режется?
> Если я могу зайти по ssh на 192.168.13.1 (с клиента на сервер) и наоборот, то предполагаю что не режется, хотя не знаю как это проверить.ssh работает поверх TCP. Используй iperf или netcat.
В новости не расскрывается как этот впн позволяет обходить двойной нат и прочее, или не позволяет?
Имеется ввиду одна сторона? Никаких проблем нет с прохождением, обычный UDP трафик, только нужно будет опцию PersistentKeepalive указать для поддержания соединения в коннтраке, т.к. сам по себе wg никакого трафика не шлет.
Если обе стороны за nat, то нужно просто прокинуть порт с одной из сторон.
По идее, надо STUN/TURN прикручивать.
То есть сделать tinc. Уже сделали, работает.
> То есть сделать tinc. Уже сделали, работает.А в нем крипто нормальное сделали все-таки в итоге? Ну то-есть 25519 и прочие ChaCha? А то уповать на AES не очень хочется, он довольно тормозной если криптоакселератора нет, а что там криптоакселератор внутрях делает хрен бы его знает. RSA так и вообще слоупок.
>> То есть сделать tinc. Уже сделали, работает.
> А в нем крипто нормальное сделали все-таки в итоге? Ну то-есть 25519
> и прочие ChaCha? А то уповать на AES не очень хочется,
> он довольно тормозной если криптоакселератора нет, а что там криптоакселератор внутрях
> делает хрен бы его знает. RSA так и вообще слоупок.You can further change the configuration as needed either by manually editing the configuration files, or by using tinc(8).
The tinc init command will have generated both RSA and Ed25519 public/private keypairs. The private keys should be stored
in files named rsa_key.priv and ed25519_key.priv in the directory /etc/tinc/NETNAME/ The public keys should be stored in
the host configuration file /etc/tinc/NETNAME/hosts/NAME. The RSA keys are used for backwards compatibility with tinc ver‐
sion 1.0. If you are upgrading from version 1.0 to 1.1, you can keep the old configuration files, but you will need to
create Ed25519 keys using the following command:tinc -n NETNAME generate-ed25519-keys
> The tinc init command will have generated
> both RSA and Ed25519 public/private keypairs.Мне не надо BOTH. Весь пойнт DJBшной крипты - в том что критичный криптокод небольшой, проверенный и зависимостей мало. А этот ваш RSA подразумевает что оно будет от openssl и всех его дыреней зависеть, а в хучшем случае ремота может еще и покормить запросами на счет RSA, после чего процессор очень крепко займется вычислениями с Big Int.
> tinc
> -n NETNAME generate-ed25519-keysЭто совершенно не отвечает на вопрос: может ли он уже быть маленьким, аккуратным, и без зависимостей от черти-каких стремных внешних либ типа openssl.
Смотри, минимальный 25519+Salsa20+1305 вообще в виде tweetnacl занимает смешной объем кода (его наизусть можно выучить) и это таки совместимо с NaCl. А если скорость капец как важна можно оптимизированный libsodium взять, но он уже все-же монстр. А теперь покажите мне этот фокус для RSA... и не надо пожалуйста #include'ов openssl.h или как его там, это сразу +100500 к дырявости.
А так если надо именно GFW и прочие гестапо с носом оставить - у китайцев для этого есть на гитхабе сетевые инструментарии которые на световые годы впереди мягкотелых западных VPNов. Там очень интересные штучки попадаются.
Штука нужная хорошая. Но какие же гавнистые и агресивные там разработчики это просто что-то.Кстати всякими великими китайскими файерволами эта штука блочится на ура. Заголовок пакета не шифрованный. Прямо сейчас можно использовать реализацию от tunsafe отредактировать config.h для полностью шифрованных пакетов.
> Но какие же гавнистые и агресивные там разработчики это просто что-то.А нельзя ли пруфца на это дело? В чем их агрессия проявляется?
> не шифрованный. Прямо сейчас можно использовать реализацию от tunsafe отредактировать
> config.h для полностью шифрованных пакетов.Глядя на реализацию tunsafe - не надо ее использовать. По сравнению с оригиналом это уж никак не work of art. Какой-то хаотично наваленый код на плюсах вперемешку с наваленым черти как асмом, какие-то stdafx.h (лучше сразу #include <facepalm.jpg>) и прочие характерные прелести. Виндоразработчики могут сделать МАЗДАЙ и подобие OPENVPNного монстра даже из wireguard'а...
Новость, конечно отличная, но когда же будет клиент для винды?
Когда кто-нибудь его напишет. Сам Джейсон точно этого делать не будет, я догадываюсь, на чем он вертел эту вашу винду.
> Новость, конечно отличная, но когда же будет клиент для винды?Не понимаю смысла в нормальном впн под систему с встроенным кейлоггером. А для тех кому секурити для галочки - в винде пара каких-то клиентов встроена (pptp, l2tp). А то что они не work of art - так там вся ОС такая, впн-клиент не сделает это сито безопасным, защищенным, приватным и все такое.
>формальную верификациюЗначение знают? А также какой это ППЦ даже для hello world?
>>формальную верификацию
> Значение знают? А также какой это ППЦ даже для hello world?Значение значительное, значит[ся]!
Вон чуть выше,
http://www.opennet.ru/openforum/vsluhforumID3/115501.html#87
коллега зуб [но не свой] даёт, что на круг, когда-нибудь потом может-быть будет точно-точно не хуже, чем у Ghostscript. Да!И hello-world не главное, главное - внушительный раздел "Публикешонз" домашней странички. Акаде-е-емики -- участвуют!
Большой недостаток WireGuard - для сети узлов A,B,C он не свяжет узлы A и C, если нет прямого соединения между A и C, но есть соединение AB и BC.А вот tinc сможет это сделать.
Ну это уже вопрос поиска баланса между количеством фич и простотой.
Из однопоточного юзерспейсного tinc на практике не удается выжать больше 600Mbps, а на мелких пакетах - 300.
Что умеет это вот?