https://www.cyberciti.biz/howto/how-to-skip-chatgpt-from-wireguard-or-openvpn-on-linux/
ChatGPT(Chat Generative Pre-trained Transformer 的缩写)是 OpenAI 的聊天机器人,它使用基于 AI/ML 的学习技术为您的查询提供答案。但是当通过 WireGuard 或 OpenVPN 等 VPN连接时,ChatGPT 会拒绝访问,您将被以下消息阻止:
让我们看看如何从 WireGuard 或 OpenVPN 访问中跳过 ChatGPT 域。
逻辑很简单,找到 chat.openai.com IP 地址并设置路由策略以跳过 VPN 接口。默认情况下,WireGuard 或 OpenVPN 将通过 VPN 接口路由所有流量,但我将设置低于 WireGuard 或 OpenVPN 接口的指标,并通过我的路由器而不是 VPN 直接路由 chat.openai.com 流量。我的设置如下:
连接到 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 地址传递它.
路由器指标是做出路由决策的配置值。路由器指标帮助路由器在到目的地的多条可行路由中选择最佳路由。该路由将朝着具有最低度量标准的网关方向前进。路由器指标通常基于路径长度、带宽、负载、跳数、路径成本、延迟、最大传输单元 (MTU)、可靠性和通信成本等信息。
Link/Dest/Route | Metric |
---|---|
chat.openai.com (或您选择的任何其他 IP/域) | 10 |
WireGuard/OpenVPN | 50 |
Default | 100 |
使用dig 命令或host 命令:
d='chat.openai.com'
dig +short A "$d" | grep -v '\.$'
ips="$(dig +short A "$d" | grep -v '\.$')"
echo "$ips"
让我们设置一些 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
启动网络浏览器并通过访问 https://chat.openai.com/ URL
对其进行测试:
这就是您可以在 Linux 上从 WireGuard 或 OpenVPN 跳过 ChatGPT 域的方法。
再次使用ip 命令如下:
for i in $ips; do sudo ip route del "$i"; done
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
首先,使用 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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。