因为众所周知的原因,国内无法方便的使用OpenAI的API进行软件开发,所以这里提供了一套兼容OpenAI的API格式的发布系统,它可以模拟OpenAI的API格式,并提供LLM的API服务。
为保证私密性同时又希望大幅度节省费用的小伙伴,可以在家里使用P40或3090搭建廉价的LLM系统,为了同API发布系统对接,又想保证必要的安全性,我们使用了OpenVPN作为连接你家庭LLM服务器的一个内网穿透工具兼具有VPN加密的安全作用,拓扑图如下所示:
从图上我们看到我们需要准备的工具:
1、需要在运营商处购卖VPS主机一台,配置2C2G就可以了。
2、在你的家里我们需要搭建Ollama LLM服务。
3、需要搭建从家里到VPS的VPN服务,这里我们使用OpenVPN。
4、在租用的VPS主机里搭建OneAPI,并设置用户访问。
5、安装Nginx为OneAPI提供HTTPS服务。
6、安装Dify并创建自己的私密AI应用。
该系统接近商业化运作 ,如你想商业化使用,请遵守开源软件的相关授权要求。
一:环境准备
为你的VPS主机与家里的AI工作站之间搭建一条VPN加密链路,实现内网穿透和数据加密,以确保你的数据安全,这里我们使用了OpneVPN为什么推荐他呢,主要原因就是省钱,他的证书可以非常方便的生成,不需要花钱向运营购买。
1、AI工作站我这里是用P40搭建的,安装了Ollama,具体的安装方法请参考:在ubuntu24.04上安装Ollama并设置跨域访问-CSDN博客
这里不再做介绍了,有需要了解的小伙伴自己参考一下上面的文档。
2、AI工作站与VPS操作系统使用了Ubuntu24.04。
3、为你的VPS申请一个域名并正确解析到你的VPS。
建议API使用二级域名,例如:agent.example.com,并将这个二级域名也解析到你的VPS。
二:部署OpenVPN
1、安装openvpn服务器
登录你的vps ubuntu24.04服务器,安装openvpn软件
sudo apt update && sudo apt upgrade -y
sudo apt install -y openvpn openvpn-systemd-resolved easy-rsa
2、设置证书身份验证
#设置证书颁发服务器
sudo make-cadir /etc/openvpn/easy-rsa
#切换到root用户
su - root
#初始化公钥
cd /etc/openvpn/easy-rsa/
./easyrsa init-pki
#创建一个证书颁发机构。
./easyrsa build-ca
3、创建服务器密钥和证书
#生成密钥对
./easyrsa gen-req agent.example.com nopass
#生成 Diffie Hellman 参数。
./easyrsa gen-dh
#创建服务器证书
./easyrsa sign-req server agent.example.com
#生成 OpenVPN 静态密钥以增强 SSL/TLS 安全性。
openvpn --genkey tls-auth /etc/openvpn/easy-rsa/pki/ta.key
注意服务器证书生成时需要输入上面设置的CA密码。
4、创建客户端密钥和证书
#为用户生成证书请求
./easyrsa gen-req user01 nopass
#创建客户端证书
./easyrsa sign-req client user01
注意:创建用户时,还要再输一次CA密码。
支持多用户,需要为每一个用户创建证和密钥。
三:配置OpenVPN服务
1、复制配置文件
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf
2、编辑此文件
sudo vim /etc/openvpn/server.conf
修改内容如下:
#去掉udp前的注释
proto udp
#指定 CA 证书、服务器证书和服务器私钥的路径
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/agent.linuxbabe.com.crt
key /etc/openvpn/easy-rsa/pki/private/agent.linuxbabe.com.key
#指定dh的路径
dh /etc/openvpn/easy-rsa/pki/dh.pem
#指定 OpenVPN 的专用 IPv4 网络,先使用默认IP。去掉注释
server 10.8.0.0 255.255.255.0
#使用子网络拓扑,去掉注释
topology subnet
#OpenVPN服务器将成为 VPN 客户端的网关,去掉注释
push "redirect-gateway def1 bypass-dhcp"
#指定DNS服务器,适用国内用户。
push "dhcp-option DNS 223.5.5.5"
push "dhcp-option DNS 119.29.29.29"
#VPN客户端可以相互ping,去掉注释
client-to-client
#指定OpenVPN静态密钥的路径
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0
注意此处的修改。
3、启动VPN服务器
sudo systemctl enable --now openvpn@server
4、查看状态
sudo systemctl status openvpn@server
5、启用IP转发
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/60-custom.conf
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.d/60-custom.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.d/60-custom.conf
6、重新加载60-custom.conf并保存更改
sudo sysctl -p /etc/sysctl.d/60-custom.conf
四:开启Firewall
为确保后端的安装,我们在操作系统层开启防火墙。
1、安装ufw
sudo apt install ufw
2、开放相关端口
#ssh端口
sudo ufw allow 22/tcp
#vpn协议端口
sudo ufw allow 1194/tcp
sudo ufw allow 1194/udp
3、编辑规则
sudo vim /etc/ufw/before.rules
内容如下:
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o tun0 -j MASQUERADE #网卡的具体名称请用ip a查看,这里是tun0
# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT
#设置数据包转发
# allow forwarding for trusted network
-A ufw-before-forward -s 10.8.0.0/24 -j ACCEPT
-A ufw-before-forward -d 10.8.0.0/24 -j ACCEPT
执行ip addr查看vpn虚拟网卡,如下图:
设置NAT转发时,请注意修改VPN转发的网卡,就是上面查到的“tun0”。
数据转发如下图参考:
注:vpn虚拟地址使用的是默认地址,请根据你的实际情况进行更改。
4、启用UFW
#启用UFW
sudo ufw enable
#重新启动UFW
sudo systemctl restart ufw
#查看规则
sudo iptables -t nat -L POSTROUTING
5、配置本地DNS解析
(1)安装bind9
sudo apt install -y bind9
(2)指定DNS服务器
sudo ufw insert 1 allow in from 10.8.0.0/24
(3)设置bind9
sudo vim /etc/bind/named.conf.options
添加递归DNS查询
allow-recursion { 127.0.0.1; 10.8.0.0/24; };
支持ipv4
#查询根DNS服务器
sudo vim /etc/default/named
#修改为:
OPTIONS="-u bind -4"
(4) 重新启动bind9
sudo systemctl restart named
至此服务器端的设置就结束了。接下来,放家里的Ollama工作站,我们定义为客户端,下一节我们就要进入客户端的设置。