如何在 Linux 上从 WireGuard 或 OpenVPN 跳过 ChatGPT?

举报
wljslmz 发表于 2023/02/20 22:24:16 2023/02/20
【摘要】 ChatGPT(Chat Generative Pre-trained Transformer 的缩写)是 OpenAI 的聊天机器人,它使用基于 AI/ML 的学习技术为您的查询提供答案。但是当通过 WireGuard 或 OpenVPN 等 VPN连接时,ChatGPT 会拒绝访问,您将被以下消息阻止:让我们看看如何从 WireGuard 或 OpenVPN 访问中跳过 ChatGPT ...

ChatGPT(Chat Generative Pre-trained Transformer 的缩写)是 OpenAI 的聊天机器人,它使用基于 AI/ML 的学习技术为您的查询提供答案。但是当通过 WireGuard 或 OpenVPN 等 VPN连接时,ChatGPT 会拒绝访问,您将被以下消息阻止:

让我们看看如何从 WireGuard 或 OpenVPN 访问中跳过 ChatGPT 域。

在 Linux 上从 WireGuard 或 OpenVPN 跳过 ChatGPT 的过程

逻辑很简单,找到 chat.openai.com IP 地址并设置路由策略以跳过 VPN 接口。默认情况下,WireGuard 或 OpenVPN 将通过 VPN 接口路由所有流量,但我将设置低于 WireGuard 或 OpenVPN 接口的指标,并通过我的路由器而不是 VPN 直接路由 chat.openai.com 流量。我的设置如下:

  • Debian 或 Ubuntu Linux 桌面
  • 位于 Linode 或 AWS 的 WireGuard 或 OpenVPN
  • 默认路由器 IPv4:192.168.2.254

第 1 步:找到您的默认路由信息

连接到 WireGuard/OpenVPN 后,使用ip 命令列出路由表:

ip route show

这是我看到的:

default via 192.168.2.254 dev enp0s31f6 proto dhcp metric 100 
10.83.200.0/24 dev lxdbr0 proto kernel scope link src 10.83.200.1 
169.254.0.0/16 dev ln-sg scope link metric 1000 
172.16.0.0/24 dev ln-sg proto kernel scope link src 172.16.0.6 metric 50 
192.168.2.0/24 dev enp0s31f6 proto kernel scope link src 192.168.2.25 metric 100 

我名为“ln-sg”的 WireGuard 接口优先使用指标 50 而不是默认指标 100。所以诀窍是添加具有较低指标的 chat.openai.com IP 地址并直接通过 192.168.2.254 默认网关 IP 地址传递它.

IPv4 路由的自动度量功能的说明

路由器指标是做出路由决策的配置值。路由器指标帮助路由器在到目的地的多条可行路由中选择最佳路由。该路由将朝着具有最低度量标准的网关方向前进。路由器指标通常基于路径长度、带宽、负载、跳数、路径成本、延迟、最大传输单元 (MTU)、可靠性和通信成本等信息。

Link/Dest/Route Metric
chat.openai.com (或您选择的任何其他 IP/域) 10
WireGuard/OpenVPN 50
Default 100

第 2 步:找出 chat.openai.com IP 地址

使用dig 命令或host 命令:

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

第 3 步:将 chat.openai.com IP 地址添加到路由表

让我们设置一些 shell 变量: 让我们使用bash for 循环来添加这些 IP:

my_gw="192.168.2.254" #Default GW
metric="10" #Routing metric value

for i in $ips
do
  sudo ip route add "$i" via "$my_gw" metric "$metric"
done

想列出新添加的 IP 地址?使用ip 命令:

ip route show
ip route show | grep -w 'metric 10'
104.18.2.161 via 192.168.2.254 dev enp0s31f6 metric 10 
104.18.3.161 via 192.168.2.254 dev enp0s31f6 metric 10 

第 4 步:测试

启动网络浏览器并通过访问 https://chat.openai.com/ URL 对其进行测试:

这就是您可以在 Linux 上从 WireGuard 或 OpenVPN 跳过 ChatGPT 域的方法。

第 5 步:从路由表中删除 chat.openai.com IP 地址

再次使用ip 命令如下:

for i in $ips; do sudo ip route del "$i"; done

第 6 步:创建用于自动化的 shell 脚本

chat.openai.com 会不时更改其 IP 地址,所以这是一个通用脚本,它添加、删除和列出 chat.openai.com 和其他一些在连接到 VPN 时拒绝工作的域。

路由策略 shell 脚本:

#!/bin/bash
# routing.policy - Main script to add, remove and list routing policy
# Author : Vivek Gite {www.cyberciti.biz} under GPLv 2.x+
# ----------------------------------------------------------------------
set -e
 
# Set metric and gateway as per your needs 
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##*/}" # who am I?
 
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 | xargs)" # remove duplicate ips
}
 
is_route_exists(){
    local i="$1"
    out="$(ip route show "$i")"
    if [[ "$out" != "" ]] 
    then
        return 0  # True
    else
        return 1 # False
    fi
 
}
add_opneapi_route(){
    check_for_root_user
    echo "Adding ${ips/$'\n'/,} to routing table ..." 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 route for $i already exists, skiping ..."
        fi
    done
}
 
remove_opneapi_route(){
    check_for_root_user
    echo "Removing ${ips/$'\n'/,} from routing table ..." 1>&2
    for i in $ips
    do
        if is_route_exists "$i"
        then
            sudo ip route del "$i" via "$my_gw"
        else
            echo "$me route for $i not found, skiping ..."
        fi
    done
}
show_openapi_route_status(){
    echo "Routing info for the '$domain' (${ips/$'\n'/,}) ..." # remove newline from the ${ips}
    for i  in $ips
    do
        ip route show "$i"
    done
  
}
 
check_for_root_user(){
if [[ $EUID -ne 0 ]]; then
   echo "$me script must be run as root" 1>&2
   exit 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 "Usage: routing.policy.add|routing.policy.delete|routing.policy.status";;
esac

使用 ln 命令创建软链接

首先,使用 chmod 命令设置执行权限 现在设置这些链接: 使用 ls 命令验证它:输出:

chmod +x -v routing.policy
mode of 'routing.policy' changed from 0664 (rw-rw-r--) to 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 routing.policy*
-rwxrwxr-x 1 vivek vivek 1913 Feb  3 00:07 routing.policy
lrwxrwxrwx 1 vivek vivek   14 Feb  3 00:08 routing.policy.add -> routing.policy
lrwxrwxrwx 1 vivek vivek   14 Feb  3 00:08 routing.policy.delete -> routing.policy
lrwxrwxrwx 1 vivek vivek   14 Feb  3 00:08 routing.policy.remove -> routing.policy
lrwxrwxrwx 1 vivek vivek   14 Feb  3 00:08 routing.policy.show -> routing.policy
lrwxrwxrwx 1 vivek vivek   14 Feb  3 00:08 routing.policy.status -> routing.policy

测试一下:

sudo ./routing.policy.add
sudo ./routing.policy.status
traceroute chat.openai.com #<--test routing
sudo ./routing.policy.delete

总结

我使用 WireGuard 和 OpenVPN 在我的 Debian 和 Ubuntu Linux 桌面上对此进行了测试。它工作起来很神奇,只要ip 命令有效,它应该可以与任何其他 Linux 发行版一起使用。简而言之,只要您可以将路由规则添加到系统的路由表中,我们就可以跳过通过 Linux(或任何其他操作系统,如 macOS 或 BSD)上的 VPN 连接路由的特定 IP 地址。当 NetworkManager 连接到您的 OpenVPN 或 WireGuard 接口时,您可以通过添加挂钩自动运行此脚本。例如,将脚本放入 /etc/network/if-up.d/ 并使其可执行。这将在 VPN 接口联机时运行脚本。同样,当你想在 VPN 接口关闭时运行它时,将脚本放在 /etc/network/if-down.d/ 中。

请参阅 NetworkManager 手册页,使用man命令:

man 8 NetworkManager
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。