Настройка OpenWRT, mwan3, adblock, openvpn, IPv6 (6in4) ч.2

В этой части я привожу конфигурацию файлов маршрутизатора для каждого провайдера.


*************************


/etc/config/network

config switch # здесь все по умолчанию

config switch_vlan # настройка управляемого коммутатора

option device 'switch0' # имя коммутатора

option vlan '1010' # тег, или имя виртуальной частной сети.

option ports '5t 0 1 2 3t' # настройка портов для vlan '1010'. 5t - порт смотрящий в "процессор", 3t - порт смотрящий в нижестоящий маршрутизатор


"t" означает что трафик через порт тегируется, если в пакетах трафика тег не совпадает, то трафик через этот порт не проходит. Зачем это нужно, распишу в следующей части.


config switch_vlan

option device 'switch0'

option ports '5t 4' # 4 - порт смотрящий в сторону ISP, без тега.

option vlan '2' # имя виртуальной частной сети.


config globals 'globals' # - по умолчанию


config device 'wan_eth0_2_dev' # настройка конфигурации порта

option name 'eth0.2' # имя порта

option macaddr 'хх:хх:хх:хх:хх:хх' # MAC-адрес порта


config interface 'loopback' # по умолчанию


config interface 'lan' # настройка локальной сети. 'lan' - имя интерфейса

option proto 'static' # тип протокола

option netmask '255.255.255.0' # маска сети

option ipaddr '192.168.10.1' # сетевой адрес маршрутизатора, адрес шлюза для нижестоящего маршрутизатора. По этому адресу можно зайти на этот маршрутизатор.

option ip6assign '60' # длина префикса IPv6 для локальной сети

option force_link '0' # если 1 то подключение всегда есть, независимо от того подключен кабель физически, или нет.

option ifname 'eth0.1010' # интерфейс, или порт через который осуществляется выход в частную сеть

option delegate '0' # отключить встроенный менеджмент IPv6. Если 1, то происходит просто какая-то дичь.


config interface 'wan' # настройка для подключения к ISP. 'wan' - имя интерфейса

option proto 'dhcp' # тип протокола

option peerdns '0' # если 0, то не принимать выдаваемые DNS ISP.

option ifname 'eth0.2' # порт через который подключаемся к провайдеру

option metric '10' # метрика интерфейса, нужна для mwan3

list dns 'ххх.ххх.ххх.ххх' # DNS через которые будут разрешаться имена хостов IPv4. Можно добавить несколько таких строк с разными адресами DNS серверов.

option delegate '0' # отключить встроенный менеджмент IPv6.


config interface 'ipv6' # настройка для подключения к туннельному брокеру. Таких интерфейсов можно создать несколько. 'ipv6' - имя интерфейса туннеля

option proto '6in4' # тип протокола

option peeraddr 'ххх.ххх.ххх.ххх' # IPv4 адрес брокера

list ip6prefix 'хххх:хххх::/48' # можно прописать, но в моей конфигурации я это не использую

option ip6addr 'хххх:хххх::2/64' # IPv6 адрес вашего туннеля который вам выдал брокер

option gateway 'хххх:хххх::1/64' # шлюз, то есть IPv6 адрес туннеля на стороне брокера. Указывать необязательно

option peerdns '0' # если 0, то не принимать выдаваемые DNS ISP. Скорей всего эта опция здесь бесполезна, но я решил добавить.

list dns 'хххх:хххх::х' # DNS через которые будут разрешаться имена хостов IPv6.

option metric '101' # метрика интерфейса, нужна для mwan3

option ttl '250' # время жизни пакетов для интерфейса.

option delegate '0' # отключить встроенный менеджмент IPv6.

option defaultroute '0' # не настраивать это подключение шлюзом по умолчанию. Если не добавить эту опцию, то маршрутизатор, благодаря балансировщику mwan3, будет пытаться направлять свой внутренний трафик на этот интерфейс, или когда используется таблица маршрутизации по умолчанию, без балансировки.


config interface 'vpnv4' # настройка для подключения к OpenVPN по протоколу IPv4

option proto 'none' # тип неуправляемого протокола

option ifname 'tun0' # название интерфейса через который будет подключаться клиент OpenVPN

option ttl '250' # время жизни пакетов для интерфейса.

option metric '201' # метрика интерфейса, нужна для mwan3

option delegate '0' # отключить встроенный менеджмент IPv6.

option defaultroute '0' # не настраивать это подключение шлюзом по умолчанию.


config interface 'vpnv6' # настройка для подключения к OpenVPN по протоколу IPv6. Настройки полностью аналогичны как для IPv4, включая option ifname 'tun0'


*************************


Файл /etc/config/dhcp


config dnsmasq # настройка локального DNS и DHCP серверов

option domainneeded '1' # Не перенаправлять DNS-запросы без DNS-имени

option localise_queries '1' # Локализовать имя хоста в зависимости от запрашиваемой подсети, если доступно несколько IP-адресов

option local '/lan/' # Локальный сервер

option domain 'lan' # Локальный домен

option expandhosts '1' # Добавить локальный суффикс домена для имен из файла хостов (/etc/hosts)

option authoritative '1' # Это единственный DHCP-сервер в локальной сети

option readethers '1' #

option leasefile '/tmp/dhcp.leases' # Файл, где хранятся арендованные DHCP-адреса

option rebind_protection '0' # Защита от DNS Rebinding (выключено)

option allservers '1' # Опрашивать все имеющиеся внешние DNS-серверы, которые указаны для конкретных интерфейсов, или в этом файле конфигурации

option localservice '1' # Только локальный DNS

option filterwin2k '1' # Не перенаправлять обратные DNS-запросы для локальных сетей

option ednspacket_max '4096' # максимальный размер пакета передаваемый DNS.

option resolvfile '/tmp/resolv.conf.auto' # адреса DNS серверов которые собираются со всех интерфейсов если они прописаны в list dns '*****'

option confdir '/tmp/dnsmasq.d' # Здесь находится дополнительный файл настроек DNS. Этот файл создает блокировщик рекламы, туда он пишет запрещенные домены.

option cachesize '10000' # размер кеша адресов DNS сервера

option quietdhcp '1' # Подавить логирование стандартной работы этих протоколов

option dnsforwardmax '200' # Максимально допустимое количество одновременных DNS-запросов

list notinterface 'vpnv4' # Игнорируемые интерфейсы. Эти интерфейсы DNS не прослушивает и не разрешает на них адреса.

list notinterface 'wan' # Игнорируемые интерфейсы. Эти интерфейсы DNS не прослушивает и не разрешает на них адреса.


config dhcp 'lan' # Настройка DHCP для локальной сети

option interface 'lan' # имя интерфейса

option start '100' # с какого адреса начнется раздача IP-адресов

option limit '150' # на каком адресе закончится раздача IP-адресов

option dhcpv6 'server' # Режим работы для DHCPv6

option ra 'server' # Режим работы для DHCPv6

option force '1' #

option ra_default '1' # Объявлять всегда, как маршрутизатор по умолчанию

option ra_management '1' #

option leasetime '5m' # время аренды адресов. Пять минут, так как маршрутизатор после перезагрузки не всегда выдает IP нижестоящему маршрутизатору.


config dhcp 'wan' # Игнорируемые интерфейсы для раздачи адресов через DHCP

option interface 'wan' # Имя игнорируемого интерфейса, можно добавлять несколько.

option ignore '1' # Имя игнорируемого интерфейса, можно добавлять несколько.


*************************


/etc/config/firewall


config defaults # настройка правил по умолчанию

option input 'ACCEPT' # разрешить входящий трафик

option forward 'ACCEPT' # разрешить перенаправление. Внимание! Это скорей всего создает брешь в сетевом экране, почитайте в сети про это подробней.

option output 'ACCEPT' # разрешить исходящий трафик

option drop_invalid '1' # Отбрасывать некорректные пакеты

option syn_flood '1' # Включить защиту от SYN-flood атак

option flow_offloading '1' # Программная реализация offloading для маршрутизации/NAT. Программное ускорение обработки. Внимание! Не все маршрутизаторы это поддерживают.

option flow_offloading_hw '1' # Аппаратный flow offloading. Аппаратное ускорение обработки. Внимание! Не все маршрутизаторы это поддерживают.


config include 'nat6' # добавляем NATv6

option type 'script' #

option path '/etc/firewall.nat6' # путь, где расположен скрипт реализующий NATv6. Нужно вручную его туда поместить, описано в первой части.

option family 'any' #

option reload '1' # перезапускать скрипт при запуске сетевого экрана


config zone # настройка зоны локальной сети

option name 'lan' # имя зоны

option network 'lan' # имя интерфейса для локальной сети. Задается этой опцией: config interface 'lan'

option input 'ACCEPT' # разрешить входящий трафик

option forward 'ACCEPT' # разрешить перенаправление.

option output 'ACCEPT' # разрешить исходящий трафик


config zone # настройка зоны для подключения к ISP

option name 'wan' # имя зоны

option network 'wan' # имя интерфейса смотрящего в сторону ISP. Задается этой опцией: config interface 'wan'

option family 'ipv4' # семейство протоколов. В данном случае IPv4.

option output 'ACCEPT' # разрешить исходящий трафик

option forward 'ACCEPT' # разрешить перенаправление. Внимание! Это скорей всего создает брешь в сетевом экране, почитайте в сети про это подробней.

option input 'ACCEPT' # разрешить входящий трафик

option masq '1' # Разрешить маскарадинг. В двух словах, это технология благодаря которой вся локалка может пользоваться одним внешним IP адресом.

option masq6 '0' # Разрешить маскарадинг для IPv6. Нужно ставить '1' если option family 'ipv6'

option masq6_privacy '0' # у меня это не используется.

option mtu_fix '1' # Ограничение MSS, более продвинутая технология обнаружения длины пакета в TCP/IP.


config zone может быть несколько, для каждого интерфейса. Можно так же объединять несколько интерфейсов в одну зону.


config forwarding # правила следования трафика. В данном случае правило разрешает следовать трафику из локальной сети в глобальную

option src 'lan' # источник трафика. 'lan' - имя интерфейса

option dest 'wan' # приемник трафика. 'wan' - имя интерфейса


config forwarding нужно создать для каждого интерфейса.


config redirect # правило для перенаправления портов

option name 'wan' # имя правила

option src 'wan' # источник, откуда пытаются зайти на порты ПК за NATом

option dest 'lan' # зона назначения. В данном случае локальная сеть

option target 'DNAT' # динамический NAT так как используется маскарадинг на интерфейсе.

list proto 'all' # перенаправлять любой протокол (TCP, UDP, ICMP)


config redirect создается для тех интерфейсов, для которых нужно открыть порты. Можно прописать только конкретные порты и протоколы. Внимание! Правило выше скорей всего создает брешь в сетевом экране, пользуйтесь обдуманно.


config rule # правила для трафика

option src 'wan' # зона источника

option dest 'lan' # зона назначения

option proto 'all' # тип протокола. В данном случае все протоколы

option name 'all_wan' # имя правила

option family 'ipv4' # семейство протоколов. В данном случае IPv4.

option device 'eth0.2' # привязка к интерфейсу

option direction 'in' # означает что устройство входящее

option target 'ACCEPT' # разрешить перенаправляемый трафик


config rule создается для всех интерфейсов. option family 'ipv4' для целей корректной балансировки нужно выбрать только 'ipv4' или 'ipv6'.


config ipset # это список сетей которые будут маршрутизироваться через VPN. Используется балансировщиком mwan3

option name 'namev4' # имя списка

option family 'ipv4' # семейство протоколов. Ipset в одном списке допускает только адреса одного протокола.

option match 'dest_net' # Тип адресов. В данном случае адреса источников, и тип net, то есть работа с подсетями х.х.х.х/0, а не по конкретным IP-адресам

option storage 'hash' # Тип хранилища адресов.

option enabled '1' # разрешить использовать этот список

option loadfile '/etc/namev4' # путь и файл где хранится список. Имеет вид, одна подсеть на строку. Формат файла неважен, формат конца строк как для UNIX систем.


config ipset для IPv6 создается отдельно. Опции которые отличаются от набора для IPv4: option name 'namev6', option family 'ipv6', option loadfile '/etc/namev6' - формат файла точно такой. Только подсети для IPv6 указываются вида abcd:abcd::/0.


*************************


/etc/config/mwan3


Правила config rule 'ххх' выполняются в порядке сверху вниз. Поэтому правила для VPN ставятся выше всех. Иначе весь трафик будет "заворачиваться" на шлюз по умолчанию, то есть непосредственно через ISP, а не через туннель.


config rule 'vpn_ipv4' # правило для трафика IPv4, который маршрутизируется через VPN туннели.

option proto 'all' # разрешить пропускать все протоколы (TCP, UDP, ICMP). Эта опция должна быть во всех правилах. Или можно выбрать только конкретный протокол, например TCP

option src_ip '192.168.0.0/16' # адрес источника который направляется в туннель. В данном случае это локальная сеть IPv4 с диапазоном адресов от 192.168.0.0-192.168.255.255

option ipset 'namev4' # набор адресов (подсетей) которые маршрутизируются через VPN туннели. То есть это IP адреса заблокированных сайтов к которым нужно получить доступ

option use_policy 'balanced_vpnv4' # имя используемой политики при совпадении трафика с этим правилом


config rule 'all_v4' # Это правило разрешает проходить весь остальной трафик IPv4 через ISP

option proto 'all' # разрешить пропускать все протоколы (TCP, UDP, ICMP)

option use_policy 'balanced_wan' # имя используемой политики

option src_ip '192.168.0.0/16' # адрес источника который направляется в туннель. В данном случае это локальная сеть


config rule 'vpn_ipv6' # правило для трафика IPv6, который маршрутизируется через VPN туннели.

option src_ip 'fd00::/8' # адрес источника который направляется в туннель. В данном случае это локальная сеть IPv6

option ipset 'namev6' # набор адресов (подсетей) которые маршрутизируются через VPN туннели.

option use_policy 'balanced_vpnv6' # имя используемой политики при совпадении трафика с этим правилом


config rule 'all_v6' # Это правило разрешает проходить весь остальной трафик IPv6 через ISP

option use_policy 'balanced_wan6' # имя используемой политики при совпадении трафика с этим правилом

option src_ip 'fd00::/8' # адрес источника который направляется в туннель. В данном случае это локальная сеть IPv6


config rule 'drop_all' # правило которое убивает весь трафик, который не попал под правила выше. Нужно что бы сразу после запуска не использовалась основная таблица маршрутизации.

Иначе трафик сразу начинает проходить еще до полной загрузки mwan3

option src_ip '0.0.0.0/0' # в данном случае абсолютно любой адрес. Применимо для IPv4 и IPv6

option use_policy 'unreachable' # политика по умолчанию настроенная в mwan3 для отклонения трафика


Ниже настройки политик "config policy". Политики включают в себя узлы (виртуальные копии интерфейсов которые настроены в /etc/config/network. С дополнительно назначенным весом и метрикой, которые определены в "config member"


config policy 'balanced_wan' # имя политики в которую входит интерфейс IPv4 для подключения к ISP

list use_member 'wan_1' # перечень виртуальных интерфейсов. В данном случае один виртуальный интерфейс подключения к провайдеру интернета

option last_resort 'unreachable' # означает что нужно отбрасывать трафик, если ни один интерфейс в политике не поднят. Эта опция должна быть во всех политиках


config policy 'balanced_wan6' # имя политики в которую входят интерфейсы IPv6 туннельных брокеров

list use_member 'ipv6_1' # имя первого виртуального интерфейса туннельного брокера.

list use_member 'ipv62_1' # имя второго виртуального интерфейса туннельного брокера. Таких интерфейсов можно несколько


config policy 'balanced_vpnv4' # имя политики в которую входит интерфейс IPv4 для подключения через VPN

list use_member 'vpnv4_1' # имя виртуального интерфейса VPN туннеля


config policy 'balanced_vpnv6' # имя политики в которую входит интерфейс IPv6 для подключения через VPN

list use_member 'vpnv6_1' # имя виртуального интерфейса VPN туннеля


config member 'wan_1' # имя виртуального интерфейса IPv4 ISP, который дальше будет использоваться в политиках и правилах mwan3. Имя виртуального интерфейса не должно совпадать с именем интерфейса настроенного в /etc/config/network.

option interface 'wan' # имя интерфейса настроенного в /etc/config/network

option metric '1' # метрика интерфейса. Нужна для определения пула равнозначных интерфейсов

option weight '1' # вес интерфейса. Работает правило пропорции.


config member 'ipv6_1' # имя виртуального интерфейса туннеля IPv6 туннельного брокера

option interface 'ipv6' # имя интерфейса в /etc/config/network

option metric '2' # метрика

option weight '1' # вес


config member у меня три штуки, для каждого туннельного брокера свой, метрика у всех одна — "2", вес так же одинаков — "1".


config member 'vpnv4_1' # имя виртуального интерфейса IPv4 туннеля VPN

option interface 'vpnv4' # имя интерфейса в /etc/config/network

option metric '3' # метрика

option weight '1' # вес


config member 'vpnv6_1' #

option interface 'vpnv6' # имя интерфейса в /etc/config/network

option metric '4' # метрика

option weight '1' # вес


Дальше настройки для интерфейсов в /etc/config/network, которые должны балансироваться через mwan3


config interface 'wan' # имя интерфейса в /etc/config/network

option enabled '1' # разрешить работу этого интерфейса

list track_ip '8.8.4.4' # IPv4 адрес для отслеживания поднят ли интерфейс.

option family 'ipv4' # семейство протоколов. Либо IPv4, либо IPv6. Одновременно оба в mwan3 работать не могут.

option count '1' # Кол-во пинг-запросов, один пинг-запрос

option interval '5' # Интервал пинг-запроса, 5 сек

option down '3' # Если пропал пинг то начинать пинговать каждые 3 сек

option track_method 'ping' # метод отслеживания, здесь при помощи пинга

option size '56' # Размер пинг-запроса

option max_ttl '60' # TTL

option check_quality '0' # проверка качества соединения. Не проверять

option up '3' # Интервал пинг-запроса при сбое восстановления

option initial_state 'offline' # Состояние по умолчанию, до тех пор пока не начались ответы на пинг запросы. Здесь состояние "выкл"

option failure_interval '3' # Интерфейс будет считать отключенным, после данного количества пинг-запросов.

option recovery_interval '3' # Интерфейс будет считаться включенным, после данного количества пинг-запросов.

option timeout '1' # время ожидания пинг-запроса

option reliability '1' # количество хостов, которые должны ответить на пинг-запрос. у меня 1 хост 8.8.4.4

list flush_conntrack 'ifup' # очистка conntrack таблиц по истории интерфейса

list flush_conntrack 'ifdown' # очистка conntrack таблиц по истории интерфейса

list flush_conntrack 'connected' # очистка conntrack таблиц по истории интерфейса

list flush_conntrack 'disconnected' # очистка conntrack таблиц по истории интерфейса


Для остальных интерфейсов IPv4 аналогично. Для интерфейсов IPv6 такие опции: list track_ip 'www.google.com' — нужно указывать домен, просто по IP работает криво, option family 'ipv6'.


Туннели от брокеров IPv6 я не пингую, для них указаны такие опции: option initial_state 'online', опцию list track_ip нужно удалить.


*************************

/etc/config/adblock


config adblock 'global' # собственно конфигурация

option adb_enabled '1' # разрешить работу блокировщика рекламы

option adb_forcedns '0' #

option adb_safesearch '0' # не использовать безопасный поиск предлагаемый поисковиками. Да, я хочу видеть порево и расчлененку в поисковой выдаче

option adb_mail '0' # отправка на почту статистики — отключено

option adb_dns 'dnsmasq' # что используется в качестве сервера DNS на маршрутизаторе

option adb_dnsflush '1' # очистка кеша DNS после обновления списков блокировок

list adb_sources 'adaway' # список блокировок №1

list adb_sources 'adguard' # список блокировок №2 На самом деле у меня их много. Если что, можно выбрать через GUI в LUCI.

option adb_trigger 'wan' # триггер запуска, при поднятии интерфейса для ISP запустится блокировщик

option adb_fetchutil 'wget' # Клиент, которым скачиваются списки блокировок

option adb_debug '1' # предоставить расширенный отчет работы блокировщика.

option adb_dnsfilereset '0' # Не сбрасывать итоговый файл блокировки. Подробно в документации на блокировщик

option adb_dnstimeout '50' # Сколько ждать ответа после перезапуска локального DNS сервера

option adb_repiface 'eth0.1010' # у меня не используется, это интерфейс куда слать отчеты о работе

option adb_report '0' # не слать отчеты о работе блокировщика

option adb_backupdir '/tmp' # папка для резервных копий списков блокировки. В OpenWRT папка /tmp это RAM-диск

option adb_backup '1' # разрешить бекап списков блокировки

option adb_tmpbase '/tmp' # основная папка для работы блокировщика.

option adb_maxqueue '32' # количество параллельно обрабатываемых потоков при обработке списков блокировок. У меня тянет все 32

option adb_triggerdelay '60' # Сколько нужно ждать после срабатывания триггера перед запуском блокировщика


*************************


/etc/config/openvpn


config openvpn 'blokirovkamnet' # название VPN подключения

option config '/etc/openvpn/blokirovkamnet.ovpn' # файл конфигурации OpenVPN

option enabled '1' # разрешить работу этого подключения


Дополнительные опции в файле *.ovpn:

nobind

client

remote xxxx.com # адрес OpenVPN сервера к которому будем подключаться

remote-cert-tls server # эта опция идет по умолчанию в конфиге сервера к которому я подключаюсь

cipher AES-128-CBC # эта опция идет по умолчанию в конфиге сервера к которому я подключаюсь

setenv opt ncp-ciphers AES-128-GCM # эта опция идет по умолчанию в конфиге сервера к которому я подключаюсь

setenv opt block-outside-dns # не направлять запросы на разрешение имен через VPN

dev tun0 # имя интерфейса в /etc/config/network к которому жестко будет привязана данная конфигурация

proto tcp # эта опция идет по умолчанию в конфиге сервера к которому я подключаюсь

sndbuf 0 # если 0, то размер буфера отправки выставляется максимальный который позволяет удаленный сервер.

rcvbuf 0 # если 0, то размер буфера приема выставляется максимальный который позволяет удаленный сервер.

route-nopull # главная опция, не принимать маршруты передаваемые удаленным сервером. Маршруты мы прописываем через свои ipset таблицы


*************************


Для второго провайдера все аналогично, за исключением того что внешние IP адреса другие. Так же отличие заключается в следующих опциях:

option vlan '1020' # это для второго провайдера.

option ipaddr '192.168.20.1' # это для второго провайдера, а так же это локальный адрес второго маршрутизатора.


Конфиг для маршрутизатора балансирующего трафик от первых двух будет короче))


Сегодня реально максималка по количеству текста.


Сегодня снова много текста. Остальное в следующей части.