kevin 6ccfb57c80 feat: 默认子网改为 192.168.77.0/24,安装脚本授权 CAP_NET_ADMIN 与 iptables 配置
- 默认 VPN 子网由 192.168.3.0/24 改为 192.168.77.0/24(db seed、前端表单默认值与 placeholder 同步)
- install_linux.sh 顶部增加 VPN_SUBNET 可配置变量
- systemd unit 增加 AmbientCapabilities/CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW,服务以 lmvpn 用户运行即可创建 TUN,无需 root
- 脚本自动开启 net.ipv4.ip_forward 并持久化到 /etc/sysctl.d/99-lmvpn.conf
- 脚本自动检测出口网卡,幂等配置 iptables NAT MASQUERADE 与 FORWARD 放行规则
- 优先 netfilter-persistent 持久化,回退 iptables-save 写 /etc/iptables/rules.v4
2026-07-06 14:42:58 +08:00
2026-07-02 20:45:53 +08:00
2026-07-02 20:45:53 +08:00

lmvpn_server

目录说明

  • data/ - 程序运行生成的数据(配置文件、数据库文件)
  • dist/ - 前端构建产物,由 Go 服务端托管提供静态资源
  • frontend/ - 前端工程(Vue 3 + TypeScript + Vite
  • internal/ - Go 后端源码
    • config/ - 配置加载
    • db/ - 数据库操作
    • handler/ - HTTP 请求处理
    • middleware/ - 中间件(认证等)
    • model/ - 数据模型
    • vpn/ - VPN 相关逻辑(认证、隧道等)
  • pytest/ - Python 测试脚本
  • main.go - Go 服务端入口文件
  • go.mod / go.sum - Go 模块依赖管理

安全配置

JWT 密钥

JWT 密钥按以下优先级加载:

  1. 环境变量 LMVPN_JWT_SECRET
  2. 配置文件 data/config.yml 中的 web.jwt_secret
  3. 首次启动时自动生成 32 字节随机密钥并写入配置文件

生产环境建议通过环境变量注入,避免密钥落盘。

默认管理员

首次启动时自动创建管理员账户,密码为随机生成的 16 位字符串。密码会:

  • 打印到 stdout(仅一次)
  • 写入 data/.initial_admin_password(权限 0600

请登录后立即修改密码,并删除 data/.initial_admin_password 文件。

登录限流

/api/login 和 WebSocket 密码认证均限制每 IP 5 次/分钟。

Unix Socket 权限

默认权限兼容反向代理(如 Caddy),可通过配置文件调整:

web:
  sock: "/run/lmvpnweb.sock"
  sock_mode: "0666"        # socket 文件权限,默认 0666
  sock_group: ""           # socket 文件 group,空=不修改
  sock_dir_mode: "0755"    # socket 目录权限,默认 0755

多租户/高安全场景建议收紧:

web:
  sock: "/run/lmvpnweb.sock"
  sock_mode: "0660"
  sock_group: "caddy"      # 将 lmvpn 进程用户加入 caddy group
  sock_dir_mode: "0750"

生产部署

  • 生产环境必须通过反向代理(如 Caddy/Nginx)提供 HTTPS/WSS
  • 配置文件 data/config.yml 权限为 0600,仅限运行用户读写
  • WebSocket /ws 端点支持 JWT 认证(?token=xxx)和密码认证两种方式
S
Description
No description provided
Readme MIT
699 KiB
Languages
Go 46.2%
Vue 40.2%
TypeScript 9.5%
Python 2.8%
Shell 1.1%
Other 0.2%