Пропуск ChatGPT из WireGuard или OpenVPN в Linux

Логика проста. Найдите IP-адрес chat.openai.com и настройте политику маршрутизации так, чтобы она пропускала VPN-интерфейс. По умолчанию или Я буду направлять весь трафик через VPN-интерфейс, но установлю метрику ниже, чем у интерфейсов WireGuard или OpenVPN, и направлю трафик chat.openai.com напрямую через маршрутизатор, а не через VPN. Мои настройки следующие:

  • Рабочий стол Debian или Ubuntu Linux
  • WireGuard или OpenVPN на Linode или AWS
  • Маршрутизатор по умолчанию IPv4: 192.168.2.254
Уведомление:Введите эти команды на VPN-клиенте Linux WireGuard, а не на сервере WireGuard Linux. Другими словами, это работает только в настольных операционных системах Linux, но не в macOS или Windows 10/11.

Шаг 1 — Найдите информацию о маршруте по умолчанию

После подключения к WireGuard/OpenVPN используйте команду ip для просмотра таблицы маршрутизации:

Вот что я вижу:показать маршрут ip

по умолчанию через 192.168.2.254 dev enp0s31f6 proto dhcp метрика 100 10.83.200.0/24 dev lxdbr0 proto ядро области ссылка источник 10.83.200.1 169.254.0.0/16 dev ln-sg область ссылка метрика 1000 172.16.0.0/24 dev ln-sg proto ядро области ссылка источник 172.16.0.6 метрика 50 192.168.2.0/24 dev enp0s31f6 proto ядро области ссылка источник 192.168.2.25 метрика 100

 

Мой интерфейс WireGuard с именем «ln-sg» использует метрику 50 вместо метрики по умолчанию 100. Поэтому трюк заключается в том, чтобы добавить IP-адрес chat.openai.com с более низкой метрикой, передав его напрямую через IP-адрес шлюза по умолчанию 192.168.2.254.

Описание функции автоматической метрики для маршрутизации IPv4

Метрики маршрутизатораМетрика маршрутизатора — это параметр конфигурации, используемый для принятия решений о маршрутизации. Он помогает маршрутизатору выбрать оптимальный маршрут из нескольких возможных. Маршрутизаторы будут двигаться к шлюзу с наименьшей метрикой. Метрики маршрутизатора обычно основаны на такой информации, как длина пути, пропускная способность, нагрузка, количество переходов, стоимость пути, задержка, максимальный размер передаваемого блока (MTU), надежность и стоимость связи.

Таблица 1: В следующей таблице приведены сводные данные
Условия, которые мой Linux-компьютер использует для назначения метрик маршрутам
Ссылка/Цель/Маршрутизациямера
chat.openai.com (или любой другой IP/домен по вашему выбору)10
WireGuard/OpenVPN50
Нарушение контракта100

Шаг 2 — Найдите IP-адрес chat.openai.com

Используйте команду dig или команду host:

$ d='chat.openai.com' $ dig +short A "$d" | grep -v '\.$' $ ips="$(dig +short A "$d" | grep -v '\.$')" $ echo "$ips"

Шаг 3 — Добавьте IP-адрес chat.openai.com в таблицу маршрутизации.

Давайте установим некоторые переменные оболочки:

Давайте используем цикл bash for для добавления этих IP-адресов:my_gw="192.168.2.254" #GW по умолчанию
metric="10" Значение метрики маршрутизации #Routing

для i в $ips сделать sudo ip route добавить "$i" через "$my_gw" метрику "$metric" сделано

Хотите просмотреть список недавно добавленных IP-адресов? Используйте команду ip:

Вот что я вижу:

$ ip route show $ ip route show | grep -w 'metric 10'

 

104.18.2.161 через 192.168.2.254 dev enp0s31f6 метрика 10 104.18.3.161 через 192.168.2.254 dev enp0s31f6 метрика 10 

Шаг 4 – Тестирование

Запустите веб-браузер и получите доступ https://chat.openai.com/ URL для проверки:

Пропуск ChatGPT из WireGuard или OpenVPN в Linux

нажмите, чтобы увеличить

Вуаля. Вот и всё, что можно сделать с WireGuard или OpenVPN в Linux. Метод домена.

 

Шаг 5 — Удалите IP-адрес chat.openai.com из таблицы маршрутизации.

Используйте команду ip еще раз следующим образом:
для i в $ips; сделать sudo ip route del "$i"; готово

Шаг 6 — Создание скрипта оболочки для автоматизации

IP-адрес chat.openai.com периодически меняется. Поэтому это универсальный скрипт для добавления, удаления и составления списка доменов chat.openai.com и некоторых других доменов, которые не работают при подключении к VPN.

скрипт оболочки routing.policy

#!/bin/bash # routing.policy - Основной скрипт для добавления, удаления и перечисления политик маршрутизации # Автор: Вивек Гите {www.cyberciti.biz} по лицензии GPLv 2.x+ # ------------------------------------------------------------------------------- set -e # Установите метрику и шлюз в соответствии с вашими потребностями metric="10" my_gw="192.168.2.254" domain="chat.openai.com facebook.com fbcdn.net static.xx.fbcdn.net www.facebook.com" ips="" me="${0##*//" # кто я? get_domain_ip_lists(){ for d in $domain do ips="${ips} $(dig +short A "$d" | grep -v '\.$')" done ips="${ips/$'\n'/ }" # remove '\n' ips="$(tr ' ' '\n'<<<"${ips}" | sort -u | check_for_root_user echo "Добавление ${ips/$'\n'/,} в таблицу маршрутизации ..." 1>&2 for i in $ips do if ! is_route_exists "$i" then sudo ip route add "$i" via "$my_gw" metric "$metric" else echo "Маршрут $me для $i уже существует, пропускается..." fi done } remove_opneapi_route(){ check_for_root_user echo "Удаление ${ips/$'\n'/,} из таблицы маршрутизации ..." 1>&2 for i in $ips do if is_route_exists "$i" then sudo ip route del "$i" via "$my_gw" else echo "Маршрут $me для $i не найден, пропускается ..." fi done } show_openapi_route_status(){ echo "Информация о маршрутизации для '$domain' (${ips/$'\n'/,}) ..." # удалить новую строку из ${ips} for i in $ips do ip route show "$i" done } check_for_root_user(){ if [[ $EUID-ne 0 ]]; then echo "Скрипт $me должен быть запущен от имени root" 1>&2 выход 1 fi } ## main ## get_domain_ip_lists # set '$ips' case "$me" in routing.policy.add) add_opneapi_route;; routing.policy.delete) remove_opneapi_route;; routing.policy.remove) remove_opneapi_route;; routing.policy.show) show_openapi_route_status;; routing.policy.status) show_openapi_route_status;; *) echo "Использование: routing.policy.add|routing.policy.delete|routing.policy.status";;

 

Используйте команду ln для создания программной ссылки.

Сначала используйте команду chmod
Установите разрешения на выполнение, теперь установите эти ссылки:

Используйте команду ls для проверки:

Выход:chmod +x -v маршрутизация.policy
Режим «routing.policy» изменен с 0664 (rw-rw-r--) на 0775 (rwxrwxr-x)
ln -sv routing.policy routing.policy.add
ln -sv routing.policy routing.policy.remove
ln -sv routing.policy routing.policy.delete
ln -sv routing.policy routing.policy.show
ln -sv routing.policy routing.policy.status
ls -l маршрутизация.политика*

-rwxrwxr-x 1 vivek vivek 1913 3 февр. 00:07 routing.policy lrwxrwxrwx 1 vivek vivek 14 февр. 00:08 routing.policy.add -> routing.policy lrwxrwxrwx 1 vivek vivek 14 февр. 00:08 routing.policy.delete -> routing.policy lrwxrwxrwx 1 vivek vivek 14 февр. 00:08 routing.policy.remove -> routing.policy lrwxrwxrwx 1 vivek vivek 14 февр. 00:08 routing.policy.show -> routing.policy lrwxrwxrwx 1 vivek vivek 14 февр. 00:08 статус.политики.маршрутизации -> политика.маршрутизации

Проверьте сами:
sudo ./routing.policy.add
sudo ./routing.policy.status
traceroute chat.openai.com #<--test routing
sudo ./routing.policy.delete

Подвести итог

Я протестировал его с WireGuard и OpenVPN на моих компьютерах Debian и Ubuntu Linux. Всё работает отлично и должно работать с любым другим дистрибутивом Linux, если команда ip работает. Вкратце, мы можем избежать маршрутизации определённых IP-адресов через VPN-соединение в Linux (или любой другой ОС, например, macOS или BSD), если вы добавите правила маршрутизации в системную таблицу маршрутизации. Вы можете автоматически запускать этот скрипт при подключении NetworkManager к вашему интерфейсу OpenVPN или WireGuard, добавив хук. Например, поместите скрипт в /etc/network/if-up.d/ и сделайте его исполняемым. Это запустит скрипт при подключении VPN-интерфейса. Аналогично, если вы хотите запустить скрипт при отключении VPN-интерфейса, поместите его в /etc/network/if-down.d/. Обратитесь к справочной странице NetworkManager с помощью команды man:
man 8 NetworkManager

1/5 - (3 голоса)

Ответить

Ваш адрес электронной почты не будет опубликован. Обязательные поля помечены *