Comments 112
нужно добавить маршрут до ip сервера статический через своего провайдера, а то получается петля.
У меня так сервер на ДО, входит по ip в одну из заблокированных подсетей, но доступ до него от провайдера есть.
В прошлой статье говорилось про Mikrotik hAP ac, но судя по отзывам — слабоват для 100+ мбит. У меня от провайдера приходит 200 мбит интернет, так что видимо мне надо что-то другое.
Роутер для домашнего использования (пара компов, мобильники). Желательно (но не обязательно) наличие вайфай.
hAP ac, он же RB962UiGS-5HacT2HnT — это дорогая ($129) гигабитная двухдиапазонная железка, ваши 200 Mbps она пропустит, не задумываясь.
Сейчас есть версия попроще — hAP ac2 (RBD52G-5HacD2HnD-TC) — $69, без SFP и еще с парой мелких drawback, но под ваши задачи тоже подойдет безусловно.
Пишут
Слабый процессор прошлого поколения. Способен прогонять через себя провайдерские 100 мбит только в месте c костылем Fastrack. Либо с минимальным количеством правил в фаирволе. В режиме серверов L2TP (c ipsec), OVPN или SSTP больше 30 мбит/с шифровать не способен.
Чушь, 40-50 MiB в секунду проходят легко и непринужденно (NAS при этом упирается в дисковый iops на торрентах быстрее). Вот speedtest с NAS, стоящего за AC —
По openvpn с дефолтным шифрованием — 70-100 mbps в зависимости от погоды на луне.
По wifi с WPA2 — 100-120 (это во время того, когда торренты качаются на NAS).
Проц не фонтан, конечно, но для текущих домашних скоростей его за глаза. Под гигабит по IPoE должен держать.
> У вас на файрволле есть правила
Правил там особенно нет — фильтр доступа снаружи, форвард https/ssh на NAS, дефолтный nat. Ну и роутинг в oVPN для некоторых адресов/подсетей.
Грамотно настроенный FW почти не влияет на скорость, впрочем. Вы же туда не десятки тысяч правил загружать собираетесь.
Особенно те, которые PPTP/pppoe.
Дык, не «домой» а «в квартиру». В квартиру SFP банально неудобно и дорого тянуть, а больше гигабита всё равно пока никто не готов давать, меди хватает.
В офисах и частном секторе картина другая.
> как и режущих GRE
Бизнесу никто ничего и не режет, а кто режет — быстро вылетают из бизнеса, если это не монополия в БЦ. Билайн (ещё со времен корбины) по l2tp точно резал из крупняка на домашних каналах. Да и думаю многие, кто туннелями интернет приносит, «режут», потому что для проброса gre через любой туннель нужны телодвижения на стороне провайдера.
С IPoE проще, там gre если и режут, то специально, таких и правда в районе нуля.
Там процессор другой архитектуры, то есть она чисто "маркетологически" в этом промежутке. На самом деле, на IPsec она даже быстрее, так что для дома действительно оптимальный вариант если нет задачи максимально производительного вайфая (в ней MIMO 2x2, а в ac 3x3).
Без POE-out очень грустно.
Без metarouter — ещё грустнее.
Процессоры — сравнимы, ещё и глюки перехода на ARM будут некоторое время всплывать. Никакого революционного прорыва там нет — по IPoE и тот, и тот справлялись с гигабитом, по pptp всё так же упирается в одно ядро на примерно одинаковых скоростях (+\- 10%).
Единственное, в чём AC2 выигрывает однозначно — это wifi, там железка под это лучше заточена. Но у АС без подрезания мощности передачи бешеная зона покрытия (10 этажей вниз и ещё метров 100 в сторону), а у АС2 — нет.
Так что тут кому что нужнее. По возможностям АС однозначно далеко впереди, проигрывая 10-20% по скорости.
1. Какие операторы предоставляют SFP домой?
2. Что вы реально крутите на Metarouter, что оно не виснет и реально работает?
3. PPTP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения.
4. По WiFi разницы вообще не заметил. Хотя, возможно, дело в том, что настроен «роуминг» на трех железках.
Почти любой в частных секторах. Их же, думаю, можно задолбать и попросить притащить в квартиру (хотя по забитым стоякам оптику не тянут).
> 2. Что вы реально крутите на Metarouter, что оно не виснет и реально работает?
habr.com/post/354710
> 3. PPTP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения.
TCP/IP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения. Однако все пользуются.
На самом деле неважно, l2tp, openvpn и pppoe ровно так же упираются в одно ядро. Если же говорить про производительность в sha256, то она грустная и на MIPS, и на ARM (пусть и ARM в 2 раза быстрее на sha256) — намного шустрее поднимать любой туннель с sha256 на самих клиентах. А если всё же хочется строить туннели на микротиках — смотреть нужно на hEX минимум и разгонять частоту, а не hAP.
Мы всё же роутер для дома — туда мало кто тащит гигабитные ipsec-туннели, а 100-200 mbps по ipsec прожуют и AC, и AC2 в любую сторону.
> Никто не хочет «прописывать» модули владельца, предпочитая ставить свое оборудование.
«Никто» — это ростелеком, видимо =) Ну и опять же — GPON это GPON. SFP встречается там, где оптика «со столба» абоненту заходит.
vidnoe.net/tarify/internet/chastnym-domam — вот наши местные просто тащат оптику на участок, что ты на втором конце поставишь им в целом наплевать (разве что предупредить нужно, что у тебя свой микротик есть).
С другой стороны, Mikrotik предлагает самые разные модули, скажем, GPON ONU module — Pluggable GPON ONU interface for Fiber to Home — возможно, он ваши задачи решит (но какому-нибудь RT мало что докажешь, мне кажется).
для Centos 7 каталога /etc/bird нету — надо создать
и вписать полные пути
include "/etc/bird/subnet.txt";
include "/etc/bird/ipsum.txt";
Хм. Мой провайдер еще и перехватывает запросы к любым DNS серверам, видимо по порту, выдавая вместо IP заблокированного ресурса IP заглушки. Думаю, многие провайдеры так делают. Было бы хорошо еще и заворачивать все DNS запросы в VPN туннель. Заодно можно переадресовать их в 1.1.1.1 или 8.8.8.8 вместо DNS сервера провайдера, который, скорее всего, тоже будет подменять IP на заглушку.
Можно, конечно, просто дописать еще один инклуд файла с маршрутами на адреса DNSов в конфиг bird, тоже будет работать.
Вопрос немного не в тему: не пробовали по OVPN раздавать IPv6 адреса с дефолтом Андроидному клиенту? У меня после получения адреса в андроиде перестают работать браузеры. При этом ping, traceroute работают.
Про Android ничего не скажу, к сожалению — изжил у себя везде, кроме STB. Если AppleTV научится показывать файлы из сетевых шар — изживу и там.
Я выбрал DLNA Plex сервер и клиент, уверен есть ПО и для smb/afp
на шлюзе тоже линь.
Хотя с bird это получается более просто, безусловно. Только bgp из bird в этом случае можно изничтожить и просто делать экспорт маршрутов из процесса static_bgp не в bgp, а прямо в protocol kernel, указав в них правильный некстхоп на стадии сборки файлов — вместо «reject;» там должно быть «via nexthop_IP;».
вывезет такая железяка?
По известной мне статистике, пока никто не попросил bgp-пира на упомянутом сервисе. А листы забирают почти полторы сотни. Возможно, это потому, что людям проще сделать так, как описано, а возможно — потому что им хочется оставить больше контроля за тем, что прилетает в их устройства, в своих руках. Не готов однозначно определить.
Про контроль я скорее в том ключе, что, выгружая файл, ничто не мешает перед его обработкой провести достаточно серьезный программный контроль его консистентности. В прямом BGP-стыке возможности такого контроля сильно ограничены возможностями маршрутизатора.
Но, безусловно, любой вариант имеет место быть, я же не обещал перекрыть все возможные варианты построения. Я всего лишь предложил тем, кому хочется, воспользоваться одним из таких вариантов.
Просто мысль вслух: именно VPN (в классическом понимании — с шифрованием) нужен не всем/не всегда. Технически, зачастую, достаточно просто p2p соединения с инкапсуляцией (без шифрования). А это может сильно облегчить жизнь роутеру. Мой уже старенький RB951G-2HnD вполне даёт 100+ МБит при 16000 маршрутов.
bird[9322]: bird: /etc/bird/ip.txt, line 1: syntax error
при том, что в первой строке файла вроде все как надо:
route 11.22.33.44 reject;
(адрес намеренно изменен)Такое выдает конечно же на этапе
systemctl start bird
Решается простейшим sed 's/\x0D$//' file1.txt > file2.txt
Решается, опять же, изменением соответствующего sed в скрипте обработки.
а для эникейщиков если вас не затруднит
Если роутер простой, а роль тонеля до vds выполняет одноплатный пэка на armbian который используется как шлюз, тоннель openvpn. То очевидно на него надо поставить все тот же bird, а как его сконфигурировать?
А вот если вы, как большинство пользователей таких схем, заворачиваете трафик на armbian на каждом устройстве в локальной сети отдельно, вам тут bgp и не очень нужен. Потому что проблемой будет как раз динамически обучать все устройства, а для такого списка префиксов это некрасиво решаемая задача.
Поэтому опишите, как у вас сейчас решается вопрос с отправкой трафика в туннель — тогда можно будет посоветовать направления модернизации схемы.
За ранее прошу прощения если будет слишком длинно
На входе простой роутер, старенький WNR3500l, к провайдеру подключен через IPoE на нем DD-Wrt, он умеет поднимать openvpn, но скорость очень маленькая.
Я вычитал что у orange pi на процессорах H3/5 есть crypto engine благодаря которому openvpn должен на них бегать быстрее. Вот тут можно посмотреть.
http://sunxi.montjoie.ovh/#support_overview
Оказалось правдой, скорость упирается в скорость канала до VDS
Все домашние железки достаточно умны чтобы обходить блокировки сами так или иначе, на vds висят socs5 прокси использую в браузерах и для телеграм, openvpn для всего остального, а еще l2tp/ipsec и pptp чисто для экспериментов, но вот та же PS4 ничего этого не умеет. И хочется прозрачное решение для всех сразу.
Как сейчас все решено.
Апельсин подключен в роутер по lan, соединяется через opnvpn с VDS, на апельсине поднята WLAN точка доступа для PS4 или любого другого устройства которому вдруг понадобится выйти в сеть в обход блокировок, ограничение только то что это WIFI.
между lan и wlan апельсина сделано перенаправление, вот так:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
и все работает.
Но железка простаивала и я подумал, а чего бы её еще не подгрузить. В итоге на апельсине поселился жесткий диск, deluged торент клиент, Mariadb mysql база данных для трех домашних медиасерверов на KODI, ну и samba шара до кучи.
Все шуршит, только с торент клиента трафик к примеру утекает в тонель, где он не нужен и я не могу его оттуда убрать. Я пробовал указывать в клиенте использовать eth1, включил в /proc/sys/net/ipv4/ rp_filter=1 на интерфейсах, все пофигу. Думаю это костыли и решение с динамическими маршрутами будет правильнее, вопрос как все сделать чтобы при этом ничего не сломать, оставив весь функционал и желательно уйти от wifi точки доступа. т.е. как я думаю на выходе использовать апельсин как gate и dns в настройках устройств которым надо обойти запреты.
Изначально идея была сделать некую дешевую и глупую чёрную коробочку "для друга", включив которую в свою домашнюю сеть и настроив её по инструкции не сложнее домашнего роутера, он получал все эти ваши впн ничего в них не понимая.
Если я правильно понял конструкцию — то можно внедрить динамику следующим способом.
1) Дефолт на апельсине прописать через внутренний IP нетгира.
2) На нетгире пробросить порт 179/tcp во внутренний адрес апельсина.
3) На апельсине поднять bird и запирить его с BGP-сервисом (например, как в моей соседней статье описано)
4) В bird прописать, что для всех полученных по bgp маршрутов некстхоп — это туннель OVPN
5) На всех домашних устройствах прописать дефолтом апельсин.
В этой схеме любое устройство сначала пойдет на апельсин, если у того в таблице маршрутизации нет маршрута в туннель, он через ICMP редирект переадресует устройство на роутер и трафик пойдет через роутер. А если маршрут в туннель есть — уйдет в туннель. Немаловажно не перекрыть icmp излишней фильтрацией, каковую очень любят пилить на iptables для icmp.
да именно так я и хотел бы сделать
- route add default gw 192.168.1.1 где 192.168.1.1 внутренний IP нетгира. Или если у нас будет работать Bird то он все берет на себя и надо указывать в его конфиге?
- нам нужен чтобы получать на апельсин по BGP маршруты от VDS в обход openvpn? Соответственно в конфиге burd на апельсине мы указываем как источник маршрутов обычный внешний адрес VDS, так?
4-5 почитаю предыдущую статью, попробую разобраться.
2. Тут логика, что устанавливаем пиринг как бы со статического адреса роутера, но пробрасываем порт в апельсин. BGP через такой NAT работает хорошо.
Можно поднимать пиринг и через VPN, но там такой же нат, там тоже пробрасывать порт. Потенциально чуть больше проблем при траблшутинге. Но допустимо.
Конфиг bird для апельсина можно взять из статьи, только в bgp прописать import all, export none, чтобы получить маршруты от внешнего сервиса и не анонсировать свои маршруты ему. Когда получите маршруты и их будет видно в birdc show route — можно делать следующий шаг и разрешать их экспорт в таблицу маршрутизации в protocol kernel. Придется, правда, еще разобраться, как написать функцию для изменения nexthop при экспорте. Если не получится самостоятельно — пишите, помогу.
сделал так, ip адреса из тоннеля
на VDS:
log syslog all;
router id 10.8.0.1;
protocol kernel {
scan time 60;
import none;
export none;
}
protocol device {
scan time 60;
}
protocol static static_bgp {
include "subnet.txt";
include "ipsum.txt";
}
protocol bgp OurRouter {
description "Our Router";
neighbor 10.8.0.4 as 64998;
import none;
export where proto = "static_bgp";
next hop self;
local as 64999;
source address 10.8.0.1;
passive off;
}
На апельсине
log syslog all;
router id 10.8.0.4;
protocol kernel {
scan time 60;
import none;
export all; # Actually insert routes into the kernel routing table
}
protocol device {
scan time 60;
}
protocol bgp OurRouter {
description "Our Router";
neighbor 10.8.0.1 as 64999;
import all;
export none;
local as 64998;
passive off;
multihop;
}
оба на birdc show protocol показывают это:
BIRD 1.6.3 ready.
name proto table state since info
kernel1 Kernel master up 14:46:07
device1 Device master up 14:46:07
static_bgp Static master up 14:46:07
OurRouter BGP master start 14:46:07 Connect
судя по всему магия не происходит (
Следующим шагом я бы попробовал пинги с одного адреса на другой (именно с указанием src address), чтобы убедиться, что работает прямое коннективити. И, возможно, на время тестирования зачистил бы правила iptables (или другого используемого файрвола) — обычно они достаточно наворочены и бывает, что блокируют трафик не очень однозначным путем.
PS, немного оффтопа: решил потестировать решение, под рукой ноутбук с windows, решил на нем поднять второй bgp и посмотреть, придут ли маршруты ну и просто потыкаться, потому что раньше сталкивался только с rip, ospf и eigrp. И не нашел софта для bgp или любого другого протокола маршрутизации. Bird и компания — все под никсы, у какого-то было написано что можно завести под cygwin, но это сомнительное удовольствие… Получается, либо windows server, либо не windows. Хотя казалось бы, http, ftp, dhcp, dns и прочие более прикладные протоколы существуют в виде десятков разных реализаций, просто выбери и поставь.
log syslog all;
router id 172.30.1.1;
protocol kernel {
scan time 60;
import none;
export all;
}
protocol device {
scan time 60;
}
protocol bgp OurRouter {
description "Our Router";
neighbor 172.30.1.2 as 64999;
# import filter { gw = 192.168.1.1; accept; }; # если нужно указывать другой некстхоп
import all; # если устраивает некстхоп на другой конец туннеля
export none;
local as 64999;
source address 172.30.1.1;
passive off;
}
Адреса и номера автономных систем тюнить по вкусу.
Так мне и не удалось подружить Bird на сервере и на локальной машинке, не хочет сервер внутри тоннеля видеть клиента. Я вот думаю, а нафиг мне вообще VDS сервер для этого, пусть там VPN крутится как крутился. Я же могу скрипт этот локально запускать и локально импортировать список и использовать его для построения маршрутов. Взлетит же?
Но, конечно, можете на локальном сервере выдергивать список маршрутов, обрабатывать его скриптом и затягивать в локальную таблицу маршрутизации.
- IP-адрес вашего интерфейса, который смотрит в провайдера
- шлюз по умолчанию вашего провайдера
- внешний IP-адрес вашего туннеля (т.е. куда коннектится туннель)
- локальный и удаленный IP-адреса внутри вашего туннеля
и я вам в ответ пришлю готовый конфиг bird, который будет работать без BGP, просто вытаскивая список маршрутов на локальную машину.
log syslog all;
router id 1.1.1.1;
protocol kernel kernel4 {
scan time 60;
ipv4 {
export all;
import none;
};
}
protocol device {
scan time 60;
}
protocol bgp OurRouter {
description "Our Router";
neighbor 2.2.2.2 as 64999;
ipv4 {
import filter { gw=3.3.3.3; accept; }; # такой адрес peer в openvpn
#import all; # а так не завелось
export none;
};
local as 64999; # bgp без разницы что AS совпадают?
source address 1.1.1.1; # в нашем случае же без разницы что указывать тут?
passive off;
}
В итоге, работает, но пришлось руками прописать адрес peer из openvpn. Может кому пригодится.
Ну и до кучи поставил dnscrypt-proxy, потому что провайдер подменяет dns-ответы… Но это уже совсем другая история)
По вашим вопросам:
1) в нашем случае совсем не важно, совпадает ли номер AS. Но это именно в нашем, потому что в общем поведение при совпадении номера (iBGP) и при его несовпадении (eBGP) сильно разнится. Поэтому если строить что-то более сложное — неплохо было бы изучить, чем они отличаются, перед проектированием.
2) в source address указывается адрес, с которого этот конкретный пир будет пытаться поднимать bgp-сессию. Поэтому, опять же, в общем случае там важно указывать правильный адрес. Но вроде бы bird умеет понять, что написана фигня, и проигнорировать.
вроде настроил, но открывается не все. Один сайт выдает почему то заглушку провайдера, телеграм не открывается вообще. Но через впн доступен.
сделал так:
log syslog all;
router id 192.16.1.6;
protocol direct {
interface "eth0", "tun0";
}
table frz;
table FCKRKN;
table other;
table master;
table VPN;
protocol static {
table frz;
description "провайдер";
check link on;
preference 100;
route 0.0.0.0/0 via 192.168.1.1;
}
protocol static {
table VPN;
description "VPN";
check link on;
preference 100;
route 0.0.0.0/0 via 10.8.0.1;
}
protocol static {
table master;
description "Common Table";
Это главная таблица, сюда вписываются все default-маршруты
route 0.0.0.0/0 multipath
via 192.168.1.1
via 10.8.0.1;
}
############утащил из прмера, не нужно######
protocol static {
table other;
description "Other custom static routes";
preference 200;
Включение всех конфигов (если есть в наличии) в /etc/bird/static_route.d/
include "/etc/bird/static_route.d/*.conf";
}
protocol static {
table FCKRKN;
description "заблокированные";
preference 200;
include "subnet.txt";
}
###########################################################################################
protocol kernel {
table frz;
persist;
learn;
scan time 20;
kernel table 10;
export all;
debug all;
}
protocol kernel {
table master;
persist;
learn;
scan time 20;
kernel table 254;
export all;
debug all;
}
protocol pipe {
table master;
peer table frz;
peer table VPN;
peer table FCKRKN;
peer table other;
import all;
import filter { gw = 192.168.1.1; accept; }
debug all;
}
вроде настроил, но открывается не все. Один сайт выдает почему то заглушку провайдера, телеграм не открывается вообще. Но через впн доступен.
сделал так:
log syslog all;
router id 192.16.1.6;
protocol direct {
interface "eth0", "tun0";
}
table frz;
table FCKRKN;
table other;
table master;
table VPN;
protocol static {
table frz;
description "провайдер";
check link on;
preference 100;
route 0.0.0.0/0 via 192.168.1.1;
}
protocol static {
table VPN;
description "VPN";
check link on;
preference 100;
route 0.0.0.0/0 via 10.8.0.1;
}
protocol static {
table master;
description "Common Table";
Это главная таблица, сюда вписываются все default-маршруты
route 0.0.0.0/0 multipath
via 192.168.1.1
via 10.8.0.1;
}
############утащил из прмера, не нужно######
protocol static {
table other;
description "Other custom static routes";
preference 200;
Включение всех конфигов (если есть в наличии) в /etc/bird/static_route.d/
include "/etc/bird/static_route.d/*.conf";
}
protocol static {
table FCKRKN;
description "заблокированные";
preference 200;
include "subnet.txt";
}
###########################################################################################
protocol kernel {
table frz;
persist;
learn;
scan time 20;
kernel table 10;
export all;
debug all;
}
protocol kernel {
table master;
persist;
learn;
scan time 20;
kernel table 254;
export all;
debug all;
}
protocol pipe {
table master;
peer table frz;
peer table VPN;
peer table FCKRKN;
peer table other;
import all;
import filter { gw = 192.168.1.1; accept; }
debug all;
}
и накосячил с маршрутами, после перезагрузки тоннель не поднимается, no route to host, плохо быть мартышкой.
Замечу, что списки на antifilter.download сейчас не обновляются, судя по всему, они делаются на основе antizapret.info, где последнее обновление было 12 октября.
К счастью, https://github.com/zapret-info/z-i обновляется регулярно.
А на основании чего сделан вывод, что списки не обновляются?
Настройка BGP для обхода блокировок, версия 2, «не думать»