Jump to content

Выборочный роутинг через VPN туннель


Recommended Posts

В 14.01.2022 в 01:42, aleeko сказал:

Форумчане, подскажите, а у вас работает данный метод обхода блокировки в комплексе с работающим. Adguard home? Именно с AGHome

работает. ничего специального для этого не делал.

p.s. dns запросы скрипта всё равно идут мимо agh на тот dns что указан в скрипте.

Link to comment
Share on other sites

Написал небольшой скрипт, оформленный в установочный пакет - vnp-list-update
Его можно использовать тогда, когда у нас уже есть рабочее vpn соединениеOpenVPN|Wireguard|VirtualIPServer. 

Если, установленного, рабочего соединения нет - скрипт бесполезен!

Утилита обновляет "белый список" всех хостов, которые смогут работать через VPN.
При обращении к любому хосту из этого списка, весь трафик будет идти через выбранное VPN соединение.
--------------------------------------------------------------------------------------------------------
Ключи запуска: vpn-list-update {add|new|del|rm|show|list|purge|clear|import|export|version|help} {имя хоста}
--------------------------------------------------------------------------------------------------------
add | new               - добавляем один хост в "белый список"
del | rm                   - удаляем указанный хост из "белого списка".
purge | clear           - полностью очищаем "белый список".
show | list               - выводим список всех хостов в "белом списке".
export                     - экспорт "белого списка" в указанный файл.
import                     - добавляем хосты из списочного файла в "белый список".
                                   в списочном файле: один хост - одна строка. 
                                   допускается использование комментариев с символом #.
version                    - отображаем версию утилиты.
help                         - настоящая справка.
--------------------------------------------------------------------------------------------------------
Примеры использования:
--------------------------------------------------------------------------------------------------------
vpn-list-update add google.com       - добавляем google.com в "белый список".
vpn-list-update import ./list.txt         - добавляем хосты из файла ./list.txt в "белый список".
vpn-list-update del google                - удаляем все хосты из "белого списка", которые содержат слово google.
vpn-list-update list                             - выводим все хосты из "белого списка".
vpn-list-update purge                        - очищаем/удаляем все хосты из "белого списка".
--------------------------------------------------------------------------------------------------------

В обычном варианте приходится сначала узнавать какие IP принадлежат данному домену, затем идти в WEB админ панель роутера и в разделе "Сетевые правила -> Маршрутизация" прописывать ручками найденные IP адреса, необходимого хоста.

Скрипт делает все немного проще: 

1. Можем добавлять хост в ручную 

vpn-list-update add google.com 

2. Либо можем добавлять хосты из ранее созданного списка

vpn-list-update import ./list.txt

 3. Список добавленных IP адресов можем посмотреть в WEB админ панели роутера, либо по команде 

vpn-list-update list 

image.thumb.png.97a8514732159f35031b35a3a34a4bce.png

Установка утилиты:

1. Скачиваем пакет в роутер, например в папку /opt
2. Далее устанавливаем его

opkg install /opt/vpn-list-update_0.2-1_mipsel-3.4.ipk

 

 

 

Edited by Zeleza
  • Thanks 5
  • Upvote 2
Link to comment
Share on other sites

2 минуты назад, nomadfromx сказал:

А что будет, когда ip адрес смениться у хоста?

В данной версии скрипта ничего не будет. 
Ручками удалить и заново добавить.

Link to comment
Share on other sites

3 минуты назад, Zeleza сказал:

В данной версии скрипта ничего не будет.

Спасибо за скрипт. Но на данном этапе, наверное, через форму проще добавить. Разве только если есть список со списом сайтов и самому написать cron-скрипт ежедневного запуска его.

Link to comment
Share on other sites

1 час назад, nomadfromx сказал:

Спасибо за скрипт. Но на данном этапе, наверное, через форму проще добавить. Разве только если есть список со списом сайтов и самому написать cron-скрипт ежедневного запуска его.

Новая версия скрипта ставит в крон и ночью в 3 часа обновляет IP всех имеющихся хостов в белом списке. 
Благодарю за комментарий.

  • Thanks 1
  • Upvote 1
Link to comment
Share on other sites

Чуть доработал скрипт: 

1. При импорте, списочный файл теперь может содержать комментарии, как с новой строки, так и на строке написания хоста. Например, можно написать комментарии как показано ниже: и так и так, скрипт сам уберет лишнее.

# это поисковик яндекса
yandex.ru # это поисковик яндекса 

2. Добавлена функция изменения времени обновления ip адресов:

vpn-list-update setime 05:00

Обновленный help по скрипту:

Скрытый текст

--------------------------------------------------------------------------------------------------------
Утилита обновляет "белый список" всех хостов, которые смогут работать через VPN.
При обращении к любому хосту из этого списка, весь трафик будет идти через выбранное VPN соединение.
--------------------------------------------------------------------------------------------------------
Ключи запуска: 
vpn-list-update {update|add|new|del|rm|show|list|purge|clear|import|export|setime|version|help} {имя хоста}
--------------------------------------------------------------------------------------------------------
update                             - обновляем список IP адресов для хостов в "белом списке"
add | new                        - добавляем один хост в "белый список"
del | rm                            - удаляем указанный хост из "белого списка".
purge | clear                   - полностью очищаем "белый список".
show | list                       - выводим список всех хостов в "белом списке".
export                             - экспорт "белого списка" в указанный файл.
setime                             - установка времени обновления ip адресов для "белого списка"
                                          формат времени обычный MM:HH, разделитель ':' обязателен.
import                             - добавляем хосты из списочного файла в "белый список".
                                          в списочном файле: один хост - одна строка. 
                                          допускается использование комментариев с символом #.
version                            - отображаем версию утилиты.
help                                 - настоящая стравка.
--------------------------------------------------------------------------------------------------------
Примеры использования:
--------------------------------------------------------------------------------------------------------
vpn-list-update add google.com   - добавляем google.com в "белый список".
vpn-list-update import ./list.txt.    - добавляем хосты из файла ./list.txt в "белый список".
vpn-list-update del google            - удаляем все хосты из "белого списка", которые содержат слово google.
vpn-list-update list                         - выводим все хосты из "белого списка".
vpn-list-update purge                    - очищаем/удаляем все хосты из "белого списка".
--------------------------------------------------------------------------------------------------------

Новую версию скрипта можно скачать по этой ссылке.

  • Thanks 1
  • Upvote 1
Link to comment
Share on other sites

Добрый день.

Хочу настроить выборочный обход блокировок по данной статье.

На данный момент испытываю недостаток знаний для настройке например по первому посту топика.

Роутер Giga (KN-1011). Подключение к интернету через L2TP (ISP beeline). На данный момент установил opkg, настроил openvpn соединение на роутере.

Уважаемый Zeleza, вашей инструкции comment=140635 достаточно для настройки обхода или она идёт в дополнение к чему-то написанному выше?

Link to comment
Share on other sites

Доброго дня

2 часа назад, Павел Фролов сказал:

Уважаемый Zeleza, вашей инструкции comment=140635 достаточно для настройки обхода или она идёт в дополнение к чему-то написанному выше?

Это полностью функциональный (отдельно работающий) скрипт или как верно подметили выше - костыль для работы с уже существующим VPN соединением. 

Что именно у Вас не работает?

Link to comment
Share on other sites

Добрый вечер.

Накатил крайнюю версию скрипта, попробовал открыть rutracker, сперва не открылся совсем (Соединение сброшено.), видимо т.к. openvpn сервер выбрал физически в РФ расположенный (логично), попробовал другой сервер (Japan), сперва не открылся опять, потом открылся, но только шапка сайта. Видимо это уже проблема именно с OpenVPN сервером.

Link to comment
Share on other sites

Скорее всего,  проблема именно в качестве работы самого VPN соединения. 

Попробуйте арендовать VPS/VDS сервер и самостоятельно настроить VPN соединение. 
Для простоты развертывания можете воспользоваться вариантами OpenVPN через docker или docker-compose на OpenVz. Если есть возможность арендовать более дорогой вариант виртуальной машины на KVM, то попробуйте развернуть более быстрый, чем OpenVPN вариант реализации VPN - WireGuard (на OpenVz его развернуть нельзя из-за отсутствия поддержки на уровне ядра). Это можно сделать по любой из доступных инструкций в сети или по этой или по этой инструкции

Link to comment
Share on other sites

В 02.02.2022 в 14:20, Zeleza сказал:

Чуть доработал скрипт: 

...

Новую версию скрипта можно скачать по этой ссылке.

Мне кажется, скрипт сломался. Сейчас при попытке выполнить add выдается такой код и ничего не добавляется (но не всегда, на 2ip.ru проверил - отработало корректно).
image.png.45c9d076ba75fd9963fe89e599c5b5ec.png

Также еще вопрос: можно при добавить параметр для add, чтобы не проставлялась галка "Добавлять автоматически"?

Link to comment
Share on other sites

33 минуты назад, nomadfromx сказал:

Мне кажется, скрипт сломался.

Не скрипт сломался, а `dig @localhost` - неправильно. Уже выше писали.

 

В 01.02.2022 в 17:34, Zeleza сказал:

оформленный в установочный пакет

Делайте для подобных пакетов архитектуру noarch - он же не для mipsel. для mips и arm тоже сойдет.

Link to comment
Share on other sites

Вот три запроса, последний через knot-dig и DoT

root@Keenetic_Giga:/opt/etc/unblocker$ dig @8.8.8.8 rutor.info +short
196.245.156.22
root@Keenetic_Giga:/opt/etc/unblocker$ dig @localhost rutor.info +short
;; Warning: Message parser reports malformed message packet.
root@Keenetic_Giga:/opt/etc/unblocker$ kdig @8.8.8.8 rutor.info +short +tls
196.245.156.22

Почувствуйте разницу..... Для определения ip лучше всего использовать knot-dig, а на кинетике настроить DoT.

Link to comment
Share on other sites

Благодарю за обратную связь. 

3 часа назад, nomadfromx сказал:

Также еще вопрос: можно при добавить параметр для add, чтобы не проставлялась галка "Добавлять автоматически"?

Уточните пожалуйста о чем идет речь?

2 часа назад, zyxmon сказал:

Делайте для подобных пакетов архитектуру noarch - он же не для mipsel. для mips и arm тоже сойдет.

Не нашел в menuconfig опции noarch.
Подскажите пожалуйста куда смотреть, чтобы собрать для архитектуры noarch?

Link to comment
Share on other sites

21 минуту назад, Zeleza сказал:

Уточните пожалуйста о чем идет речь?

Это параметр в пользовательских статических маршрутах позволяющий поднимать маршрут автоматом когда в сети появляется указанный шлюз VPN подключения. У вас он видимо при добавлении записей автоматом ставиться в "Да".

Видимо вот это место в вашем коде:

"auto": true
Edited by keenet07
Link to comment
Share on other sites

Благодарю Всех за комментарии и пожелания.

Новая версия скрипта содержит следующие изменения и улучшения:

  1. Сборка под все архитектуры процессоров.
  2. По просьбе @nomadfromx, теперь можно при добавлении хоста указать флаг off, для того, чтобы маршруты сразу не включались (включить маршрут можно через WEB интерфейс или по команде ниже без флага off).
     
    vpn-list-update add google.com off
      
  3. Теперь можно указать узнать текущий адрес DNS сервера, через который получаем IP хосто
    vpn-list-update dns
  4. И можно указать адрес DNS сервера на желаемый (работает через tls)

    vpn-list-update dns 1.1.1.1
  5. Вместо установки времени обновления - сделал установку периода обновления. Другими словами, сейчас можно установить интервал через который будут происходить обновление ip адресов. В примере ниже обновление происходит каждые 2 часа. Допустимые форматы m и h минуты и часы соотвественно. 

  6. vpn-list-update period 2h


Шаги по установке:

  1. Скачиваем пакет по ссылке vpn-list-update, например в папку /opt

  2. Удаляем предыдущую версию

    opkg remove vpn-list-update
  3. Устанавливаем скаченную версию 

    opkg install /opt/vpn-list-update_0.5-1_all.ipk

    Обновленный help по скрипту:

    Скрытый текст

    --------------------------------------------------------------------------------------------------------
    Утилита обновляет "белый список" всех хостов, которые смогут работать через VPN.
    При обращении к любому хосту из этого списка, весь трафик будет идти через выбранное VPN соединение.
    --------------------------------------------------------------------------------------------------------
    Ключи запуска:
    vpn-list-update {update|add|new|del|rm|show|list|purge|clear|import|export|period|dns|version|help} [хост]
    --------------------------------------------------------------------------------------------------------
    add | new                - добавляем один хост в "белый список"
                                       первым аргументом является сам хост,
                                       вторым может быть указан флаг авто-включения маршрута сразу при добавлении хоста.
                                       Не включать маршрут: off. По умолчанию всегда on (указывать не обязательно).
    del | rm                   - удаляем указанный хост из "белого списка".
    purge | clear           - полностью очищаем "белый список".
    dns                          - отображает текущий используемый DNS сервер для запросов IP искомого хоста.
                                       в случае если аргумент будет задан, то произойдет замена DNS на указаныый адрес.
    show | list               - выводим список всех хостов в "белом списке".
    export                     - экспорт "белого списка" в указанный файл.
    update                    - обновляем список IP адресов для хостов в "белом списке"
    period                     - установка периода обновления ip адресов для "белого списка"
                                      формат обновления: XXm - каждые XX минут или XXh - каждые XX часов в сутки.
                                      возможен только один из вариантов, например, 10m или 2h
                                      по умолчанию, установлен период обновления каждые 12 часов или 2 раза в сутки.
    import                    - добавляем хосты из списочного файла в "белый список".
                                     в списочном файле: один хост - одна строка.
                                     допускается использование комментариев с символом #.
    version                  - отображаем версию утилиты.
    help                       - настоящая стравка.
    --------------------------------------------------------------------------------------------------------
    Примеры использования:
    --------------------------------------------------------------------------------------------------------
    vpn-list-update add google.com            - добавляем google.com в "белый список".
    vpn-list-update add google.com off      - добавляем google.com в "белый список", при этом маршрут сразу будет отключен.
    vpn-list-update import ./list.txt              - добавляем хосты из файла ./list.txt в "белый список".
    vpn-list-update del google                     - удаляем все хосты из "белого списка", которые содержат слово google.
    vpn-list-update show                             - выводим все хосты из "белого списка".
    vpn-list-update purge                            - очищаем/удаляем все хосты из "белого списка".
    --------------------------------------------------------------------------------------------------------

     

Edited by Zeleza
  • Thanks 2
  • Upvote 1
Link to comment
Share on other sites

3 часа назад, Zeleza сказал:

По просьбе @nomadfromx, теперь можно при добавлении хоста указать флаг off, для того, чтобы маршруты сразу не включались (включить маршрут можно через WEB интерфейс или по команде ниже без флага off).

Не совсем так.

Если при добавлении маршрута указан только интерфейс (как в вашем случае), и не указан шлюз, то данная настройка никаким образом не влияет на маршрут. Он будет работать в любом случае при поднятом интерфейсе.

Link to comment
Share on other sites

7 часов назад, keenet07 сказал:

Не совсем так.

Если при добавлении маршрута указан только интерфейс (как в вашем случае), и не указан шлюз, то данная настройка никаким образом не влияет на маршрут. Он будет работать в любом случае при поднятом интерфейсе.

Добро, возможно неверно сделал описание, чуть позже исправлю. 
Ориентировался на пояснения на странице официальной поддержки keenetic на которой сказано следующее:
Включите опцию "Добавлять автоматически", чтобы маршрут применялся, когда доступен указанный шлюз. 

Флаг off в скрипте это точный эквивалент опции auto=false при исполнении команды CLI:

curl -s -d "{"host":"111.111.111.111", "interface":"OpenVPN0","auto":false,"comment":"мой сайт"} "localhost:79/rci/show/ip/route" 

image.thumb.png.f3e784e6dbed791bbe9f211c0f086da5.png

Link to comment
Share on other sites

Всё правильно. Только в вашей команде шлюз "gateway" вручную не задан. Поэтому, что FALSE, что TRUE в данном случае без разницы. Маршрут всё равно будет работать. Правило не отключится, пока поднят интерфейс. В общем как временный выключатель маршрута это не получится использовать. Проверьте в веб-интерфейсе, если хотите на любом маршруте работу этого ключа.

Edited by keenet07
Link to comment
Share on other sites

15 минут назад, Andrey Che сказал:

Если несколько ВПН соединений настроено, то как указать, какое использовать?

Выбор по моему не реализован. Найдите в коде "OpenVPN0" и замените на "OpenVPN1", "OpenVPN2" и т.д. в зависимости от того сколько у вас их там прописано и какой именно нужен. 

Либо вот этот параметр заполните в скрипте "VPN_INFACE="

Edited by keenet07
Link to comment
Share on other sites

20 минут назад, Andrey Che сказал:

Если несколько ВПН соединений настроено, то как указать, какое использовать?

Благодарю за вопрос. 

Если Вы настроили второе VPN соединение после установки скрипта, то перестройки не произойдет и будет использовано соединение которое было изначально установлено до установки пакета.

В общем случае, при запуске скрипта, он проверяет на наличие существующих VPN соединений и если их несколько, то просит Вас выбрать одно из них. 

Для удобства, в слегка подправленной версии, сделал возможным ручную установку интерфейса в случае необходимости.

  1. Ручная установка VPN интерфейса 
    vpn-listupdate interface OpenVPN2 
  2. Показать текущий используемый VPN интерфейс 
    vpn-listupdate interface

    Обновленная справка по пакету:

    Скрытый текст

    --------------------------------------------------------------------------------------------------------
    Утилита обновляет "белый список" всех хостов, которые смогут работать через VPN.
    При обращении к любому хосту из этого списка, весь трафик будет идти через выбранное VPN соединение.
    --------------------------------------------------------------------------------------------------------
    Ключи запуска: 
    vpn-list-update {update|add|new|del|rm|show|list|purge|clear|import|export|period|dns|version|help} [хост]
    --------------------------------------------------------------------------------------------------------
    add | new                  - добавляем один хост в "белый список"
                                       первым аргументом является сам хост, 
                                       вторым может быть указан флаг авто-включения маршрута, когда доступен выбранный VPN шлюз.
                                      Не включать маршрут: off. По умолчанию всегда on (указывать не обязательно).
    del | rm                     - удаляем указанный хост из "белого списка".
    purge | clear            - полностью очищаем "белый список".
    dns                           - отображает текущий используемый DNS сервер для запросов IP искомого хоста.
                                        в случае если аргумент будет задан, то произойдет замена DNS на указаныый адрес.
    show | list                - выводим список всех хостов в "белом списке".
    export                      - экспорт "белого списка" в указанный файл.
    update                     - обновляем список IP адресов для хостов в "белом списке"
    period                      - установка периода обновления ip адресов для "белого списка"
                                       формат обновления: XXm - каждые XX минут или XXh - каждые XX часов в сутки.
                                       возможен только один из вариантов, например, 10m или 2h
                                       по умолчанию, установлен период обновления каждые 12 часов или 2 раза в сутки.
    import                      - добавляем хосты из списочного файла в "белый список".
                                       в списочном файле: один хост - одна строка. 
                                       допускается использование комментариев с символом #.
    interface                  - устанавливаем или выбираем VPN интерфейс (если их несколько).
    version                     - отображаем версию утилиты.
    help                          - настоящая стравка.
    --------------------------------------------------------------------------------------------------------
    Примеры использования:
    --------------------------------------------------------------------------------------------------------
    vpn-list-update add google.com            - добавляем google.com в "белый список".
    vpn-list-update add google.com off      - добавляем google.com в "белый список", при этом маршрут 
                                                                        не будет применяться, когда будет доступен выбранный VPN шлюз.
    vpn-list-update import ./list.txt              - добавляем хосты из файла ./list.txt в "белый список".
    vpn-list-update del google                     - удаляем все хосты из "белого списка", которые содержат слово google.
    vpn-list-update show                             - выводим все хосты из "белого списка".
    vpn-list-update purge                            - очищаем/удаляем все хосты из "белого списка".
    --------------------------------------------------------------------------------------------------------


     

Link to comment
Share on other sites

7 часов назад, Zeleza сказал:

Благодарю за вопрос. 

Если Вы настроили второе VPN соединение после установки скрипта, то перестройки не произойдет и будет использовано соединение которое было изначально установлено до установки пакета.

В общем случае, при запуске скрипта, он проверяет на наличие существующих VPN соединений и если их несколько, то просит Вас выбрать одно из них. 

Для удобства, в слегка подправленной версии, сделал возможным ручную установку интерфейса в случае необходимости.

  1. Ручная установка VPN интерфейса 
    vpn-listupdate interface OpenVPN2 
  2. Показать текущий используемый VPN интерфейс 
    vpn-listupdate interface

    Обновленная справка по пакету:

      Показать содержимое

    --------------------------------------------------------------------------------------------------------
    Утилита обновляет "белый список" всех хостов, которые смогут работать через VPN.
    При обращении к любому хосту из этого списка, весь трафик будет идти через выбранное VPN соединение.
    --------------------------------------------------------------------------------------------------------
    Ключи запуска: 
    vpn-list-update {update|add|new|del|rm|show|list|purge|clear|import|export|period|dns|version|help} [хост]
    --------------------------------------------------------------------------------------------------------
    add | new                  - добавляем один хост в "белый список"
                                       первым аргументом является сам хост, 
                                       вторым может быть указан флаг авто-включения маршрута, когда доступен выбранный VPN шлюз.
                                      Не включать маршрут: off. По умолчанию всегда on (указывать не обязательно).
    del | rm                     - удаляем указанный хост из "белого списка".
    purge | clear            - полностью очищаем "белый список".
    dns                           - отображает текущий используемый DNS сервер для запросов IP искомого хоста.
                                        в случае если аргумент будет задан, то произойдет замена DNS на указаныый адрес.
    show | list                - выводим список всех хостов в "белом списке".
    export                      - экспорт "белого списка" в указанный файл.
    update                     - обновляем список IP адресов для хостов в "белом списке"
    period                      - установка периода обновления ip адресов для "белого списка"
                                       формат обновления: XXm - каждые XX минут или XXh - каждые XX часов в сутки.
                                       возможен только один из вариантов, например, 10m или 2h
                                       по умолчанию, установлен период обновления каждые 12 часов или 2 раза в сутки.
    import                      - добавляем хосты из списочного файла в "белый список".
                                       в списочном файле: один хост - одна строка. 
                                       допускается использование комментариев с символом #.
    interface                  - устанавливаем или выбираем VPN интерфейс (если их несколько).
    version                     - отображаем версию утилиты.
    help                          - настоящая стравка.
    --------------------------------------------------------------------------------------------------------
    Примеры использования:
    --------------------------------------------------------------------------------------------------------
    vpn-list-update add google.com            - добавляем google.com в "белый список".
    vpn-list-update add google.com off      - добавляем google.com в "белый список", при этом маршрут 
                                                                        не будет применяться, когда будет доступен выбранный VPN шлюз.
    vpn-list-update import ./list.txt              - добавляем хосты из файла ./list.txt в "белый список".
    vpn-list-update del google                     - удаляем все хосты из "белого списка", которые содержат слово google.
    vpn-list-update show                             - выводим все хосты из "белого списка".
    vpn-list-update purge                            - очищаем/удаляем все хосты из "белого списка".
    --------------------------------------------------------------------------------------------------------


     

Не определяет и не устанавливает Wireguard интерфейс.

Screenshot 2022-02-06 213846.png

Link to comment
Share on other sites

А у меня наоборот, показываются Wireguard интерфейсы, которые не используются для выхода в интернет.

Потому что идёт разбор show/ip/route

Можно попробовать отбирать из show/interface с проверкой атрибутов global и state

Link to comment
Share on other sites

По команде vpn-list-update interface выводи следующее:

~ # vpn-list-update interface
-------------------------------------------------------
Обнаружен всего один VPN интерфейс.
Используем его по умолчанию:
-------------------------------------------------------

С  Wireguard почему-то не работает.

Link to comment
Share on other sites

Попробуйте поставить в соединениях которые не видит "Использовать для выхода в интернет".

И заново поискать скриптом.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...