Files
lmvpn_server/internal/model/vpn.go
T
kevin a770862c7c feat: 支持 IPv6 双栈地址派发
- model: VpnSetting 新增 Subnet6 字段,VpnReservation 新增 IPAddress6
- alloc: 处理 /64 等大子网 cidr.AddressCount 溢出,回退 65536 扫描上限
- protocol: initMessage 新增 ip6/prefix6/server_ip6(omitempty 向后兼容)
- service: 双分配器 alloc4+alloc6,ApplySettings 配置双 IP 与双路由,
  Allocate 返回 v4+v6 一对地址
- switch: SwitchConn 新增 AssignedIP6(),Register/Unregister 注册双 key,
  反欺骗按 IP 版本分别校验 v4/v6 源地址
- tunnel: tunnelConn 新增 assignedIP6,init 消息填充 v6 字段
- handler: 新增 validateSubnet6(/64~/126),settings/预留 API 全面支持 v6
- diag: 新增 IPv6 forwarding 与 NAT66 masquerade 检测
- install_linux.sh: 新增 VPN_SUBNET6、ipv6 forwarding、nft/ip6tables NAT66
- 前端: v6 子网输入框、v6 预留、v6 诊断卡片、客户端列表 v6 列
- 文档: init 消息、IP 分配、子网约束、TUN 配置、NAT、反欺骗全部更新
2026-07-07 11:38:21 +08:00

35 lines
979 B
Go

package model
import "time"
const VpnSettingSingletonID = 1
type VpnSetting struct {
ID uint `gorm:"primaryKey"`
Enabled bool `gorm:"default:false"`
Subnet string `gorm:"size:64;not null"`
Subnet6 string `gorm:"size:64"`
MTU int `gorm:"default:1420"`
InterfaceName string `gorm:"size:16"`
AllowClientToClient bool `gorm:"default:false"`
DoLocalIPConfig bool `gorm:"default:true"`
DoRemoteIPConfig bool `gorm:"default:true"`
UpdatedAt time.Time
}
func (VpnSetting) TableName() string {
return "vpn_settings"
}
type VpnReservation struct {
ID uint `gorm:"primaryKey;autoIncrement"`
UserID uint `gorm:"uniqueIndex;not null"`
IPAddress string `gorm:"size:64;uniqueIndex"`
IPAddress6 string `gorm:"size:64"`
CreatedAt time.Time `gorm:"autoCreateTime"`
}
func (VpnReservation) TableName() string {
return "vpn_reservations"
}