Comments 50
Поскольку у меня не стоит задача «развернуть» весь трафик в интернет через другую страну, то в туннельный интерфейс я буду маршрутизировать только интересующие меня ресурсы.

Лучше делать через Mangle и адресные листы. В Mangle на прероуте указываете метку маршрута, в Routes указываете интерфейс и метку. Если нужно, распишу подробнее.
В итоге просто добавляете в адресные листы название ресурса, и он сразу ходит через указанный шлюз.
Это помечает соединение
/ip firewall mangle add chain=prerouting src-address=192.168.0.0/24 dst-address-list=AnotherGWList action=mark-routing new-routing-mark=AnotherGWRoute

Это маршрут для помеченных
/ip route add distance=1 routing-mark=AnotherGWRoute gateway=*ваш_GW*

Ну а это — ресурс, который нужно маршрутизировать через нужный шлюз.
/ip firewall address-list add address=linkedin.com list=AnotherGWList

Далее просто добавляете нужный ресурс в адресные листы с именем AnotherGWList.
Через Mangle же можно более тонко настраивать заворот, к примеру только с определенного IP или мас-адреса. Увы, листов мас-адресов пока нет.
Вариант, не плох, но есть нюансы.
А вдруг у ресурса есть поддомены, например, их тоже тогда надо все описать/вписать верно?
Не проще ли из базы whois вытянуть список подсетей ресурса (если мы конечно говорим не про маленький сайт визитку) и завернуть их через нужный GW?
Следующий нюанс, адрес резолвится в IP (а списки таки да, динамические, хранятся именно по IP) создаются или при добавлении ресурса или при первом старте микротика — те ситуация когда вдруг на ресурсе измениться IP может быть исправлена либо пересозданием записи в списке или перезагрузкой микротика, что тоже не по феншую.

Вообщем, имхо, ваш вариант имеет место быть, но я бы честно говоря, несколько раз подумал прежде чем использовать именно его.
Я подумаю на предмет использования встроенного скриптинга в Микротик для автоматического обновления адресов в маршрутах.
Я поступил проще:
/ ip firewall filter add action=add-src-to-address-list address-list=toVPN address-list-timeout=3d chain=forward content="Location: http://адрес заглушки провайдера\?" in-interface=WAN protocol=tcp src-port=80
Дальше mangle и маршрут как описал AcidVenom.
При попытке открыть сайт отображается заглушка и ip сайта добавляется в address-list, при повторном открытии он уже открывается через туннель. Время жизни записи в моем случае 3 дня. Можно менять по желанию.
Если хотите автоматизировать через whois — скрипты в помощь. Это опять же проще через адресные листы.
Адреса резолвятся в IP и живут по TTL, так что по феншую.
Once a domain is added to an address-list it is resolved by routeros and the resolved IP(s) is added to the same address-list as a dynamic entry with timeout value the TTL returned by the DNS protocol.
When the timeout (TTL) expires, routeros will re-resolve the domains again and if the IP is changed it will replace it in the address-list.
Вот за этот отсыл к мануал спасибо, сразу эту инфу не нашел — тогда да, вполне годное решение.
Но вопрос с сабдоменами все равно открыт получается.
У себя я решил этот вопрос заворотом подсетей а вот с вашим предложением даже не знаю как быть…
Дык можно точно так же в адресный листы указать подсеть с тем же именем. Вопрос именно в удобстве: не нужно каждый раз лазить в маршруты, мэнглы и т.д. Подкинул нужные IP или названия доменов и готово. И опять же видно весь список или списки.
А уж если у вас поднят OSPF и вы используете кучу маршрутов, то в них голова заболит разбираться.
Забыли маскарад на ВПН интерфейс сделать (если не настроено, или настроено на другой интерфейс, не пойдет трафик).

/ip firewall nat add chain=srcnat action=masquerade out-interface=*имя_ВПН_интерфейса*
Не забыл. Я это и не планировал делать. Ubuntu тоже мой и через него пакеты от LAN проходят с неизменным src IP. Ну и пусть. Двойная трансляция мне нужна.
Согласен. Пост читал вдоль. У меня частный случай, когда впн сервер не маскарадит.
Попробовал. Работает почему-то заметно медленнее. Предположу, что теряет первые пакеты и переписылает.
Я уже делал нечто подобное правда без GRE. Там же и про RoadWarriors написано (т.е. L2TP+IPSec). Единственный момент — на мой взгляд лучше использовать libreswan, т.к. у strongswan проблемы с apple-девайсами (причем на момет начала 2016 года проект был заморожен, и разработчик не спешил фиксить баги. libreswan это, собственно, форк strongswan).
Спасибо, поизучаю эту тему. Вопрос с Apple-девайсами у меня действительно остался открытым…
Если мне не изменяет память, то libreswan — форк Openswan, который, в свою очередь, форк FreeS/WAN.

StrongSwan — имеет корни от FreeS/WAN, но почти полностью переосмысленный.
Возможно, что и так, но главная моя мысль была в том, что когда я этой задачей занимался, strongswan почти не развивался, и в репах Debian 8 лежала битая версия (latest). Хорошо, если ситуация изменилась
На офицальном сайте стронгсвана последнее обновление датируется 14.08.2017.
*просмотрел по диагонали*
эм… а не лучше ли будет OpenVPN с сертификатами заюзать?
Давайте определимся откуда и куда… Тема с OpenVPN для Apple-девайсов у меня пока не раскрыта. Что-то конкретное говорить про LAN2WAN через OpenVPN я пока тоже не готов. Может есть пример такой конфигурации?
да везде :)
у самого к продукции эпл неприязнь, но если погуглить, то можно такое найти
habrahabr.ru/post/168853
ну и
itunes.apple.com/ru/app/openvpn-connect/id590379981?mt=8
а пример конфигурации… если vps делаем ovpn сервером, на микротике просто добавляем интерфейс, ну и также например маршрутами необходимый трафик в него посылаем по адресу назначения…
просто gre… наблюдал уже, что некоторые провайдеры ни с того ни с сего резать начинают… imho openvpn более гибок, да и с сертификатами безопаснее, чем с psk…
Спасибо. Подумаю на тему OpenVPN на досуге.
Я не сталкивался с тем, чтобы провайдеры «резали» gre. Какого-то разумного объяснения тому, зачем им это делать не нахожу. В любом случае, у меня получился уже не GRE, а ESP. Вот его как раз могут начать «резать» по требованию властей…
OpenVPN сильно медленнее ipsec в силу работы в userspace.
Ну и как упоминали ниже, микротики не умеют его через udp, что тоже накладывает ограничения в производительности. Ситуация такая уже много лет и меняться не собирается.
и чего вы за udp ухватились? :)
а если почитать пост между строк, то видно, что автору 443/tcp будет лучшим вариантом :)
хотя тут еще про sstp писали… не знаю — его еще не щупал.
да и медленнее… у меня тут интернеты сильно медленнее столичных. и ничего — меня устраивает :)
а в цифрах можно про медленнее? у меня конечно не hEX… но и аплинк всего 5120/896…
Полгода-год назад SSTP прокачивал до 3-5Мбит/с, L2TP+IPsec с тех пор стабильно прокачивает 25Мбит/с.
Ну… зависит от железки конечно. У меня 3011, который в разы быстрее хекса, и он не выжимает 100 мбит, ну в районе 50-70 где-то. Ipsec разгоняется до ~150.
А зачем 443/tcp собственно? Если говорить про тотальную секьюрность и антицензуру, то надо смотреть в сторону udp2raw или govpn, но это уже не микротик будет.
ну у меня туннельчик до VPS настроен — вроде полгода пока — полет нормальный…
на каком железе, какая версия и в чем хреновость заключается?
Микротик не умеет UDP и LZO с OVPN, и разработчики это допиливать не собираются, официальная позиция — используйте SSTP…
ну меня интересовал именно tcp на 443ий порт
а сжатие… так ли оно необходимо? если учесть, что большинство по объему трафика плохо сжимается, ибо данные и так уже сжаты?
В планах настроить IKEv2 туннель с моих устройств (я использую технику Apple) непосредственно на сервер с использованием сертификатов.

Предложил бы использовать для этой цели SSH. На стороне клиента делаем что-то вроде:
ssh -w 0:0 root@server_ip
Мне неизвестно о существовании аналога /etc/network/interfaces на OS X, так что видимо tun0 на стороне Apple придётся настраивать вручную (и маршрутизацию тоже). Но зато поддержка сертификатов и шифрования из коробки.
Если MacOS это может сработать, то в iOS скорее всего нет.
В Apple-устройствах есть встроенные VPN клиенты. Подключение через них производится «в один клик».
SSH клиенты, даже бесплатные, для iOS есть, и они поддерживают как минимум проброс портов.
Но в общем да, неаккуратненько. Тема интересная, подумаю тоже на досуге, как заставить заработать встроенный VPN клиент на iOS.
Да, эта статья у меня есть в закладках, но это пока не заработало (бился над этим дня 3). Там есть лайфкак связанный xauth, который мне применять не хочется.
Еще у меня и на Mасbook и на iPad стоят последние бетты. Может что с ними не так… Я на досуге еще раз поиграюсь.
Обращаю внимание на то, что не сконфигурирован keepalive. Мне так и не удалось включить ответную часть на Ubuntu. Если не будет трафика, то интерфейс на MikroTik будет «уходить» из running и подниматься, только если пойдет трафик со стороны Ubuntu.

Попробуйте использовать netwatch, отправляя пинг на Ubuntu — это будет работать вместо keepalive
Спасибо, не знал. Меня пока устраивает Чехия. Дальше посмотрим…
Тоже пользуюсь связкой mikrotik + ubuntu сервер на VPS от Arubcloud для vpn. Только использую не тоннель сайт-ту-сайт, а l2tp+ipsec сервер (strongswan) на убунту, с ручным подключением.
Но есть вопрос, может тут кто ответит, почему с клиента windows l2tp+ipsec, находящийся за NAT, я без проблем подключаюсь к удаленному l2tp ipsec серверу mikrotik, а чтобы подключиться к серверу l2tp+ipsec ubuntu, приходится править реестр windows, так как ошибка 809 (ms рекомендует, если клиент за NAT то внести изменения в реестр HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent\AssumeUDPEncapsulationContextOnSend )
P.S. Пробовал разных провайдеров, со статикой. В роли шлюза и сервера использовал, mikrotik, ubuntu server, 10/14/16 версий. Алгоритм шифрования ipsec на убунте тот же, что и на mikrotik.
При этом клиенты ios/android без проблем випиенятся за nat'ом той же сети, как к mikrotik, так и к ubuntu.
Пробую такую конфигурацию (с ubuntu 16.04) и… не работает. Пинговать машины друг друга пингуют (пришлось на микротике в явном виде прописать адрес на gre-интерфейс), добавляю машруты — пинг/трейсроут (с машины за микротиком) на добавленные адреса проходят а что то большее — нет и в логе ubuntu IPv4: martian source <ip_куда_обращаемся> from <публичный ip микротика>, on dev tun1
Спасибо! Добавил настройку IP адреса на интрефейсе MikroTik.
Что касается маршрутизации и forwarding-а пакетов, то нужно tcpdump-ить трафик и смотреть что видно. В логах следов ping/traceroute ничего не будет.
У меня была проблема в том, что при добавления сайта в список, микротик брал его ip адреса из ДНС провайдера, а он отдавал свою заглушку. Поправил глобальный ДНС на 1.0.0.1 и все заработало. Но кроме linkedin.com. В чем с ним проблема так и не понял.

У меня была проблема с MTU, в tcpdump-е было что-то вроде:


ICMP x.x.x.x unreachable - need to frag (mtu 1426), length 556

Пробовал устанавливать MTU на GRE-интерфейсе (и вообще где торько можно), не получалось.
Долго искал решение, помогло только добавление tcp-mss для интерфейсов GRE, например:


/ip firewall mangle
add action=change-mss chain=forward new-mss=1300 out-interface=gre passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=1420-65535
add action=change-mss chain=forward new-mss=1300 in-interface=gre passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=1420-65535
Only those users with full accounts are able to leave comments. Log in, please.