Премиальное программное обеспечение и практические уроки
Логика проста. Найдите IP-адрес chat.openai.com и настройте политику маршрутизации так, чтобы она пропускала VPN-интерфейс. По умолчаниюWireGuard или OpenVPN Я буду направлять весь трафик через VPN-интерфейс, но установлю метрику ниже, чем у интерфейсов WireGuard или OpenVPN, и направлю трафик chat.openai.com напрямую через маршрутизатор, а не через VPN. Мои настройки следующие:
- Рабочий стол Debian или Ubuntu Linux
- WireGuard или OpenVPN на Linode или AWS
- Маршрутизатор по умолчанию IPv4: 192.168.2.254
Шаг 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), надежность и стоимость связи.
Ссылка/Цель/Маршрутизация | мера |
---|---|
chat.openai.com (или любой другой IP/домен по вашему выбору) | 10 |
WireGuard/OpenVPN | 50 |
Нарушение контракта | 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 для проверки:
Вуаля. Вот и всё, что можно сделать с WireGuard или OpenVPN в Linux. ChatGPT Метод домена.
Шаг 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