1panel搭建mihomo让你的服务器正常访问谷歌Gemini
前言
我踩了很多坑,我一开始使用的是cloudflare warp 香港服务器依旧不行,
cloudflare worker 香港服务器依旧会因为cloudflare自动分配最近的网络导致依旧使用的还是香港ip,导致无法正常的访问,
使用了全局代理环境变量也解决不了
又使用了nginx反向代理,一直陷入了逻辑误区,
最后通过ai帮助分析了解到透明代理的方式,尝试后,并成功的解决服务器无法访问googleAI的API的问题,因此记录下来
我遇到的问题
-
一台香港的linux服务器无法正常访问谷歌的api
-
使用mihomo作为服务器的全局代理
-
通过流量转发的方式可以有效的解决这个问题
-
-
mihomo(米哈油)是什么就不多做介绍了
-
需要其他可正常访问谷歌ai的服务器或网络搭建节点给此服务使用
-
或者自行购买(此问题请自行解决,不做探讨)
-
架构实现
一台linux服务器(任何地方的服务器,可以访问到你架设或购买的代理地址)
-
编排mihomo docker版本
-
编辑config.yaml
-
开启tun透明代理,dns劫持的方案,让全局流量都走规则分流,多代理模式统一端口为7890{sk5 http(s)},不要使用fakeip,会导致域名分流失效,他会导致域名转换成ip
-
使用代理规则分流
-
谷歌AI api走代理地址
-
其他则根据分流走本地
-
-
-
服务器内搭建nginx反向代理
-
域名解析到ip地址
-
创建一个反向代理
-
反向代理的地址则为谷歌AI的api
-
-
-
服务器内测试是否成功
-
curl 谷歌AI api地址 走代理
-
ping 域名,任何域名都无法ping通
-
ping ip,不走代理,可ping通
-
ping 属于ICMP,因此问题出现在环境变量上,但无所谓
-
-
dokcer下载镜像 走代理(比如拉取什么的)
-
创建好容器后的 容器 不走代理
-
-
证书服务 走代理
-
1panel内部更新 走代理
-
网站方面
-
静态网站 不走代理
-
一键安装的应用 不走代理
-
nginx反向代理非本服务器地址 走代理
-
nginx反向代理本服务器地址 不走代理
-
-
总结:docker内的服务不走因为默认不继承宿主机,一些本机的服务使用的是127.0.0.1:xxx,由于使用的是本地的host,是不会到达mihomo 层
-
反向代理的外部网络是会被服务器mihomo 劫持dns,走分流,判断是否是谷歌,走对应的线路的
延迟高低取决于你连接你服务器的延迟,服务器使用的代理地址的延迟,代理地址到谷歌api地址的延迟
教程开始
先curl一下googleAI的API(key去后台自己申请,我测试完后会删除key,不要直接套用我的)
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=AIzaSyD25UFVg1EKYFtH7cUxRHf-Np9mjn-uoxU" -H "Content-Type: application/json" -X POST -d '{"contents": [{"parts":[{"text": "Explain how AI works"}]}]}'
提示为当前地区不可使用
服务器无安全组或者ssh默认是22端口,
为了安全和方便可以选择安装面板操作,
因本教程基本围绕docker和反代,使用1panel作为操作面板
安装1panel面板
我使用的服务器为debain12,先通过ssh安装它
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh
-
选择你喜欢的语言:2
-
默认 opt
-
设置端口
-
设置安全入口
-
设置账号
-
设置密码
安装防火墙
更新软件包
sudo apt update
安装 UFW
sudo apt install ufw
放开 1Panel 系统端口
sudo ufw allow 8090/tcp
上述命令中的 8090 端口需要替换为安装 1Panel 系统时自定义的端口
因还是需要通过命令,后续的所有操作由1panel内置终端操作
启动 UFW
sudo ufw enable
不放行22端口
为了安全着想
如果你的ssh非标准也不需要放开,请注意,如果你没有放开1panel,将无法在访问,则需要服务商提供通过vnc或控制台放开端口
搭建mihomo
使用编排docker
需要注意的是,你如果需管理面板这一块,我这里并没有,请自行添加,或者你其他地方有面板也可以使用,放开9090端口即可,设置完使用完请及时关闭端口。
-
我只应用于本地,请注意
-
没有设置9090端口访问的密码
-
不要轻易的防火墙放开7890 9090 等端口
-
version: '3'
services:
mihomo:
container_name: mihomo #名称
image: docker.io/metacubex/mihomo:Alpha #容器镜像
pull_policy: always
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
restart: always
pid: host
ipc: host
cap_add:
- ALL
security_opt:
- apparmor=unconfined
network_mode: host #网络使用本地的host的地址,用的是主机的地址和端口,请注意端口的冲突问题
privileged: true #特权模式,权限不够则无法正常使用tun劫持dns
volumes:
- ./clash_meta/clash:/root/.config/mihomo #映射目录,此目录下的config.yaml 为配置文件
- /dev/net/tun:/dev/net/tun
编辑config.yaml
这是你映射的目录下的配置文件,也是最主要的
注意不要使用fakeip,它会导致域名分流失效。
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '0.0.0.0:9090'
tun:
enable: true
stack: mixed
dns-hijack:
- "any:53"
- "tcp://any:53"
auto-route: true
auto-redirect: true
auto-detect-interface: true
dns:
enable: true
ipv6: false
respect-rules: true
nameserver:
- https://120.53.53.53/dns-query
- https://223.5.5.5/dns-query
proxy-server-nameserver:
- https://120.53.53.53/dns-query
- https://223.5.5.5/dns-query
nameserver-policy:
"geosite:cn,private":
- https://120.53.53.53/dns-query
- https://223.5.5.5/dns-query
"geosite:geolocation-!cn":
- "https://dns.cloudflare.com/dns-query"
- "https://dns.google/dns-query"
####################################################################################下面自己填写,上面的可复制黏贴
proxy-providers:
<节点提供者名称>:
url: "<节点订阅链接>"
type: http
interval: 86400
health-check: {enable: true,url: "https://www.gstatic.com/generate_204", interval: 300}
override:
additional-prefix: "<节点名称前缀>"
proxies:
- name: "直连"
type: direct
udp: true
geodata-mode: true
geox-url:
geoip: "https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat"
geosite: "https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
mmdb: "https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb"
asn: "https://mirror.ghproxy.com/https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
proxy-groups:
- name: 默认
type: select
proxies: [自动选择,直连,香港,台湾,日本,新加坡,美国,其它地区,全部节点]
- name: Google
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: Telegram
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: Twitter
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: 哔哩哔哩
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: 巴哈姆特
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: YouTube
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: NETFLIX
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: Spotify
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: Github
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
- name: 国内
type: select
proxies: [直连,默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择]
- name: 其他
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]
#分隔,下面是地区分组
- name: 香港
type: select
include-all: true
filter: "(?i)港|hk|hongkong|hong kong"
- name: 台湾
type: select
include-all: true
filter: "(?i)台|tw|taiwan"
- name: 日本
type: select
include-all: true
filter: "(?i)日|jp|japan"
- name: 美国
type: select
include-all: true
filter: "(?i)美|us|unitedstates|united states"
- name: 新加坡
type: select
include-all: true
filter: "(?i)(新|sg|singapore)"
- name: 其它地区
type: select
include-all: true
filter: "(?i)^(?!.*(?:🇭🇰|🇯🇵|🇺🇸|🇸🇬|🇨🇳|港|hk|hongkong|台|tw|taiwan|日|jp|japan|新|sg|singapore|美|us|unitedstates)).*"
- name: 全部节点
type: select
include-all: true
- name: 自动选择
type: url-test
include-all: true
tolerance: 10
#####################################################################################################上面自己填写
rules:
- DOMAIN-SUFFIX,googleapis.com,默认
- MATCH,直连
#只有访问google地址使用默认,其他都是直连,有其他需求请自行设置
查看容器日志
tun 正常,无错误,并且已经成功代理google的dns
测试一下
已经可以了
通过1panel去搭建了一下证书,可以看到流量自动分流到了直连
1panel搭建反向代理谷歌API地址
虽然说本地使用curl可以正确的访问到googleAI 的API地址,如何解决你其他位置需要调用googleAI的API呢
根据现有的环境,通过反向代理,即可实现其他网络访问到googleAPI 地址,
妈妈再也不用担心cf的高延迟和cf worker 免费的限制次数了
这个linux服务器可以为任意地区,可以连接代理即可,代理可以访问googleapi即可
反向代理服务通过服务器内部的架构图
新建一个反向代理
前提是域名解析到当前服务器IP地址
开启https
反向代理源文件
location ^~ / {
proxy_pass https://generativelanguage.googleapis.com;
proxy_set_header Host generativelanguage.googleapis.com;
add_header Cache-Control no-cache;
proxy_ssl_server_name on;
}