diff --git a/wireguard_iproute_openwrt.txt b/wireguard_iproute_openwrt.txt index a86ac11..1f4dc1e 100644 --- a/wireguard_iproute_openwrt.txt +++ b/wireguard_iproute_openwrt.txt @@ -1,6 +1,6 @@ -Есть возможность поднять свой VPN сервер ? Не хотим использовать redsocks ? +Есть возможность поднять свой VPN сервер ? Не хотим использовать redsocks ? Хотим завертывать на VPN только часть трафика ? -Например, из ipsetв zapret только порт tcp:443, из ipban - весь трафик, не только tcp ? +Например, из ipset zapret только порт tcp:443, из ipban - весь трафик, не только tcp ? Да, с VPN такое возможно. Опишу понятийно как настраивается policy based routing в openwrt на примере wireguard. Вместо wireguard можно использовать openvpn или любой другой. Но wireguard прекрасен сразу несколькими вещами. @@ -27,7 +27,7 @@ Wireguard может дать 50 mbps там, где openvpn еле тащит 1 Перспективным направлением так же считаю легкую собственную модификацию исходников существующих VPN с целью незначительного изменения протокола, которая ломает стандартные модули обнаружения в DPI. В wireguard можно добавить в начало пакета handshake лишнее поле, -заполненное случайным мусором. Разумеется, в таком случае требуется держать изменениую версию +заполненное случайным мусором. Разумеется, в таком случае требуется держать измененную версию как на сервере, так и на клиенте. Если затея срабатывает, то вы получаете максимальную скорость, при этом полностью нагибая регулятора. Полезная инфа по теме : https://habr.com/ru/post/415977/ @@ -254,6 +254,86 @@ iptables -t mangle -C PREROUTING -m set --match-set ipban dst -j MARK --set-mark # fw3 restart +--- По поводу двойного NAT --- + +В описанной конфигурации nat выполняется дважды : на роутере-клиенте происходит замена адреса источника из LAN +на 192.168.254.3 и на сервере замена 192.168.254.3 на внешний адрес сервера в инете. +Зачем так делать ? Исключительно для простоты настройки. Но если вы готовы чуток еще поднапрячься и не хотите двойного nat, +то можете вписать в /etc/config/firewall "masq '0'", на сервер дописать маршрут до вашей подсети lan. +Чтобы не делать это для каждого клиента, можно отвести под всех клиентов диапазон 192.168.0.0-192.168.127.255 +и прописать его одним маршрутом. + +--/etc/network/interfaces.d/wgvps------------- + post-up ip route add dev $IFACE 192.168.0.0/17 + post-down ip route del dev $IFACE 192.168.0.0/17 +---------------------------------------------- + +Отсутствие двойного NAT значительно облегчает проброс портов с внешнего IP vpn сервера в локалку какого-либо клиента. +Для этого надо выполнить 2 действия : добавить разрешение в фаервол на клиенте и сделать dnat на сервере. +Пример форварда портов 5001 и 5201 на 192.168.2.2 : + +--/etc/config/firewall-------------------------- +config rule + option target 'ACCEPT' + option src 'tunvps' + option dest 'lan' + option proto 'tcp udp' + option dest_port '5001 5201' + option name 'IPERF' +------------------------------------------------ + +# fw3 restart + +--/etc/network/interfaces.d/wgvps------------- + post-up iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --ports 5001,5201 -j DNAT --to-destination 192.168.2.2 + post-up iptables -t nat -A POSTROUTING -o wgvps -d 192.168.2.2 -p tcp -m multiport --dports 5001,5201 -j MASQUERADE + post-down iptables -t nat -D PREROUTING -i eth0 -p tcp -m multiport --ports 5001,5201 -j DNAT --to-destination 192.168.2.2 + post-down iptables -t nat -D POSTROUTING -o wgvps -d 192.168.2.2 -p tcp -m multiport --dports 5001,5201 -j MASQUERADE +---------------------------------------------- + +Аналогично можно поступить и с udp. Проброс tcp и udp порта необходим для полноценной работы bittorrent клиента, чтобы работали входящие. + +--- Как мне отправлять на vpn весь трафик с bittorrent ? --- + +Можно поступить так : посмотрите порт в настройках torrent клиента, убедитесь, что не поставлено "случайный порт", +добавьте на роутер правило маркировки по порту источника. +Но мне предпочтительно иное решение. На windows есть замечательная возможность в +прописать правило установки поля качества обслуживания в заголовках ip пакетов в зависимости от процесса-источника. +Для windows 7/2008R2 необходимо будет установить ключик реестра и перезагрузить комп : +# reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\QoS /v "Do not use NLA" /t REG_SZ /d "1" +Редактировать политику можно в : gpedit.msc -> Computer Configuration -> Windows Settings -> Policy-based QoS +На win 10 ключик реестра больше не работает, правила qos в gpedit применяются только для профиля домена. +Необходимо пользоваться командой powershell New-NetQosPolicy. Гуглите хелп по ней. Пример : +# powershell New-NetQosPolicy -Name "FTP" -AppPathNameMatchCondition "qbittorrent.exe" -DSCPAction 1 +Однозначно требуется проверка в wireshark или netmon успешности установки поля dscp. Если там по-прежнему 0x00, +значит что-то не сработало. 0x04 означает DSCP=1 (dscp находится в старших 6 битах). + +На роутере в фаер прописываем правило : + +--/etc/config/firewall-------------------------- +config rule + option target 'MARK' + option src 'lan' + option proto 'all' + option extra '-m dscp --dscp 1' + option name 'shape-dscp-1' + option set_mark '0x0800/0x0800' +------------------------------------------------ + +# fw3 restart + +Теперь все с полем dscp "1" идет на vpn. Клиент сам решает какой трафик ему нужно забрасывать +на vpn, перенастраивать роутер не нужно. +На linux клиенте проще всего будет выставлять dscp в iptables по номеру порта источника : + +--/etc/rc.local--------------------------------- +iptables -t mangle -A OUTPUT -p tcp --sport 23444 -j DSCP --set-dscp 1 +iptables -t mangle -A OUTPUT -p udp --sport 23444 -j DSCP --set-dscp 1 +------------------------------------------------ + +можно привязываться к pid процесса, но тогда нужно перенастраивать iptables при каждом перезапуске +торент клиента, это требует рута, и все становится очень неудобно. + --- А если не заработало ? --- Мануал пишется не как копипастная инструкция, а как помощь уже соображающему.