1.DeepSeek内网接入背景

AI如火如荼,但内网开发如何借助东风?最好的方案当然是堆硬件,全量模型布一套,谁看了都说好,然而实情是预算有限,AI又太过强大,不用又不行,怎么办?用参数小一点的模型?

小模型看起来啥都好,实际效果嘛,谁用谁知道,一用一个不吭声。拿来当个百科还是可以的,分析推理问题,特别是代入到真实的业务环境中,小模型就太不够用啦。

也因此有了这一次的折腾:如何在保障内网数据安全的前提下引入在线大模型工具,使研发团队能从AI发展中受益。当然这里的安全不只是内网的网络安全,还包括了数据的安全,特别是提问的数据,文件、图像等不能再泄露给第三方。

2.接入方案

先说方案,模型方面使用deepseek开放平台,之所以使用deepseek,是因为他的api性价比更高,模型能力相对也更全面(当然想用其他的也是一样的思路),客户端使用deepchat,目前发现的性能功能比较综合全面,且数据都是在本地保存的客户端APP,体验也相当不错。通过dns做内网地址解析,nginx做反向代理将内网的deepseek请求转发到外网。

这样下来,管理好代理节点的内外网关系,防火墙策略即可保证网络的安全(当然没有做到严格的内外网隔离,可以进一步通过流量审计提升安全性,毕竟要用外网模型,肯定是无法做到物理隔离了),同时,客户端数据全部存在本地(历史问题,回答等),避免了数据向三方聚合平台的泄露。

3.安装部署步骤

接下来就是实操。

1.安装dnsmasq作为内网dns代理,这一步其实也可以省略,只需替换client中的模型地址即可,但为了服务器迁移方便,最好还是做一层dns代理;

安装过程省略,配置如下(vim /etc/dnsmasq.conf):

listen-address=10.0.1.30
# 或者如果希望也监听回环地址
# listen-address=127.0.0.1,10.0.1.30

# 其他配置
address=/api.deepseek.com/10.0.1.30
server=8.8.8.8
server=114.114.114.114
cache-size=1000
local-ttl=300
log-queries
log-facility=/var/log/dnsmasq.log

由于我的dns和nginx都在一个节点中,所以中转到了本地

2.安装nginx作为反向代理,安装过程省略,配置如下(vim /etc/nginx/nginx.conf):

events {
    worker_connections 768;
}

# DeepSeek API代理服务器配置
http {
 server {
    listen 80;
    server_name api.deepseek.com;

     # 记录访问日志
    access_log /var/log/nginx/deepseek_access.log;
    error_log /var/log/nginx/deepseek_error.log;
    # HTTP重定向到HTTPS
    return 301 https://$server_name$request_uri;
 }

 server {
    listen 443 ssl default_server;
    server_name _; # 匹配任何主机名,但优先级最低

    # 您必须为默认块也配置一个SSL证书,可以使用同一个或一个通用的
    ssl_certificate /etc/nginx/ssl/deepseek.crt;
    ssl_certificate_key /etc/nginx/ssl/deepseek.key;

    # 为这个默认块也配置日志,以便调试
    access_log /var/log/nginx/default_ssl_access.log;
    error_log /var/log/nginx/default_ssl_error.log;

    # 处理方式:可以返回一个错误,或者也代理到同一个上游(但不推荐)
    return 444; # Nginx会直接关闭连接
    # 或者返回一个HTTP 403错误
    # return 403 "No SNI provided";
}

server {
    listen 443 ssl;
    server_name api.deepseek.com;

 # 记录访问日志
    access_log /var/log/nginx/deepseek_access.log;
    error_log /var/log/nginx/deepseek_error.log;

    # SSL证书配置
    ssl_certificate /etc/nginx/ssl/deepseek.crt;
    ssl_certificate_key /etc/nginx/ssl/deepseek.key;

    # SSL协议配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # 代理配置
    location / {
        # 使用域名而非IP,配合resolver实现动态解析
        resolver 8.8.8.8 114.114.114.114 valid=30s;

        # 设置代理目标
        set $target "https://api.deepseek.com";
        proxy_pass $target$request_uri;

        # 请求头设置
        proxy_set_header Host api.deepseek.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 传递原始头信息
proxy_set_header Content-Type $content_type;
        #proxy_set_header Authorization $http_authorization;
        proxy_set_header Authorization "Bearer DEEPSEEK_API_KEY";
        proxy_set_header Accept $http_accept;
        proxy_set_header User-Agent $http_user_agent;

        # SSL相关设置
        proxy_ssl_server_name on;
        proxy_ssl_name api.deepseek.com;
        proxy_ssl_protocols TLSv1.2 TLSv1.3;
        proxy_ssl_verify on;
        proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;

        # 超时设置
        proxy_connect_timeout 30s;
        proxy_send_timeout 30s;
        proxy_read_timeout 300s;

        # 禁用缓冲以获得实时响应
        proxy_buffering off;
        proxy_request_buffering off;

        # 错误处理
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_intercept_errors on;

        # CORS支持(如果需要)
        add_header Access-Control-Allow-Origin * always;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS' always;
        add_header Access-Control-Allow-Headers 'Authorization, Content-Type' always;

        # 处理OPTIONS请求
       if ($request_method = 'OPTIONS') {
            return 204;
        }
    }

    # 健康检查端点
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        allow 10.0.0.0/16;
        deny all;
    }
  }

}

其中对应的证书生成:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/nginx/ssl/deepseek.key \
  -out /etc/nginx/ssl/deepseek.crt \
  -subj "/CN=api.deepseek.com"

nginx配置中的DEEPSEEK_API_KEY需修改为实际的deepseek的api_key,当然也可以用相邻前面注释掉的那句,那样就需要在每个内网客户端配对应的api_key,如果使用人较多,建议还是每个内网客户端单独配key。

3.内网机安装证书deepseek.crt,安装deepchat客户端,设置模型为的deepseek,即可使用,此处需要注意:内网机证书需安装到“受信任的根证书颁发机构”中,同时,由于deepchat使用nodejs作为后台服务,其后台服务需要单独设置证书,添加环境变量NODE_CA_CERTS,值为deepseek.crt的绝对路径。

问题点1:dnsmasq启动时可能会和systemd-resolved端口冲突,修改/etc/systemd/resolved.conf文件,设置DNSStubListener=no,后重启服务即可解决(sudo systemctl restart systemd-resolved)。

问题点2:如果将dns和nginx装在一台服务器上,可能出现外网无法解析的问题,需要在dns服务启动后,重新配置外网的dns解析地址(此时外网的网卡未被监听解析),将"nameserver 8.8.8.8
options edns0 trust-ad"写入/etc/resolv.conf即可,该文件是一个指向stub...的配置,由systemd-resolved服务启动时生成。

a6246946-c1c2-4f4d-82ce-4052feb87406
posted on 2025-09-17 21:00  我可是正经人  阅读(66)  评论(0)    收藏  举报  来源