维度 | 三层专线接入(传统方案) | 二层专线上云(L2GW) |
网络层级 | 三层(IP 路由) | 二层(MAC 转发 + VXLAN 隧道) |
子网规划 | 云上云下网段不能重叠 | 支持同子网 IP 通信 |
迁移粒度 | 子网粒度 | 虚拟机/Pod 粒度 |
IP 地址变更 | 上云需修改 IP 地址 | 无需修改 IP 地址 |
主要用途 | 普通混合云互联 | 业务平滑迁移上云、容灾、弹性扩容 |

组件 | 角色 | 说明 |
L2GW CVM | 二层网关核心 | 部署在管理 VPC 中的 CVM 实例,负责二层流量转发和 VXLAN 隧道封装/解封装。 |
管理子网 | 运维管理面 | 部署 L2GW CVM 的子网,使用单独子网和业务子网分开。 |
业务子网 | 业务承载面 | 实际需要二层互通的业务子网。 |
VXLAN 子网 | VXLAN 管控面 | 建立 VXLAN 隧道的子网,使用单独子网和业务子网分开。 |
HAVIP | 高可用引流 | 高可用虚拟 IP,作为 VPC 子网和 IDC 方向的流量入口,由 Keepalived/VRRP 管理。 |
VXLAN 隧道 | 二层扩展 | 在 L2GW 与 IDC Switch 之间建立 VXLAN Overlay 隧道,承载二层流量。 |
专线网关 | 专线接入网关 | 腾讯云本地网关,实现 L2GW 与 IDC 之间的三层网络互通。 |
网卡 | 用途 | 说明 |
eth0(管理口) | 运维管理 | 仅用于 SSH 登录和日常运维,禁止用于业务流量转发。 |
vpc0(VPC 方向) | L2GW > VPC 业务通信 | 绑定弹性网卡,连接用户 VPC 业务子网。 |
idc0(IDC 方向) | L2GW > IDC 业务通信 | 绑定弹性网卡,承载 VXLAN 隧道和 VRRP 心跳,不可删除。 |
集群套数 = 总流量 ÷ 单机吞吐 = 120 ÷ 20 = 6。/data/ 目录并创建软链接:#下载L2GW部署包wget https://iso-1255486055.cos.ap-guangzhou.myqcloud.com/l2gw_v2.0_20260820_193300.tar.gz# 解压到 /data/ 目录tar -xzf l2gw_v2.0_20260820_193300.tar.gz -C /data/# 创建软链接cd /dataln -s l2gw_v2.0_20260820_193300 l2gw
/data/l2gw 目录之下执行。角色 | 命名 | 说明 |
管理口 | eth0(不变) | 不纳入 l2gw 命名空间,仅用于 SSH 管理登录。 |
云上 VPC 侧 | vpc0 / vpc1 / ... | VPC 引流网卡(对应系统底层 eth2/eth3 等)。 |
云下 IDC 侧 | idc0 / idc1 / ... | Underlay / VTEP + VRRP 心跳网卡(对应系统底层 eth1 等)。 |
l2gw_install_interface.sh 纳管时,会把底层网卡挪入 l2gw 命名空间并统一改名为 vpcN / idcN(序号 N 由用户显式传入,不依赖系统)。vpc_idx 驱动 2xxx/3xxx/4xxx,idc_idx 驱动 5xxx),与系统网卡名彻底解耦。vpcN/idcN 后,原系统名不再可见,排查时需通过 MAC 地址 确认网卡对应关系。可用 ip -d link show <vpcN/idcN> 查看 MAC,与云平台弹性网卡的 MAC 对照确认。l2gw.conf 统一控制。对外只需配置一个配置项 EXTRA_TUNNEL_OVERHEAD(额外隧道长度),MTU 与 MSS 会自动联动计算,无需手动分别设置:# l2gw.conf# 额外隧道长度(字节):# 0 → 直连专线(默认)# 101 → 经 VPNGW(IPsec)承载EXTRA_TUNNEL_OVERHEAD=0
承载路径 | EXTRA_TUNNEL_OVERHEAD | 隧道 MTU | TCP MSS |
直连专线 / LGW(默认) | 0 | 1412 | 1372 |
经 VPNGW(IPsec) | 101 | 1312 | 1272 |
l2gw_install_global.sh 安装时会校验 l2gw.conf 必须存在且配置合法,否则安装失败。子网 | CIDR | 网关 | 用途 |
管理子网 | 10.0.0.0/24 | - | L2GW 管理口 eth0(不接入 l2gw 命名空间) |
Underlay | 10.96.0.0/16 | - | VTEP 通信 + VRRP 心跳 + VXLAN 承载网 |
子网1 | 192.168.1.0/24 | 192.168.1.1 | 云上 VM1 + 云下 IDC(大二层互通) |
子网2 | 192.168.2.0/24 | 192.168.2.1 | 云上 VM2(大二层子网2) |
IDC-子网1 | 192.168.1.0/24 | - | 云下 IDC 服务器(与子网1同网段,大二层互通) |
IDC-子网2 | 192.168.2.0/24 | - | 云下 IDC 服务器(与子网2同网段,大二层互通) |
Internet | 8.8.8.8/32 | - | 公网出口(缺省路由 0.0.0.0/0) |
HAVIP | IP | 绑定网口 | 所在子网 | VRID | 用途 |
HAVIP-underlay | 10.96.0.100 | idc0 | Underlay | 51 | VTEP 源 IP(主备漂移保隧道不断)+ VRRP 心跳对端 |
HAVIP-l2-1 | 192.168.1.100 | vpc0 | 子网1 | 52 | 子网1 VPC 引流(VM1 默认网关) |
HAVIP-l2-2 | 192.168.2.100 | vpc1 | 子网2 | 53 | 子网2 VPC 引流 |
节点 | eth0(管理口) | idc0(Underlay) | vpc0(子网1) | vpc1(子网2) |
L2GW 主 | 10.0.0.100 | 10.96.0.11 | 192.168.1.21/24 | 192.168.2.21/24 |
L2GW 备 | 10.0.0.101 | 10.96.0.12 | 192.168.1.22/24 | 192.168.2.22/24 |
资源类型 | 申请资源 | 备注 |
用户 VPC(客户账号) | 申请子网1(如 192.168.1.0/24) | 云上云下同子网通信 |
| 子网1 创建 2 个跨租户弹性网卡挂载 L2GW + 1 个 HAVIP | VPC 引流用 |
| 申请子网2(如 192.168.2.0/24) | 云上与云下 Switch 通过 VXLAN 打通 |
| 子网2 创建 2 个跨租户弹性网卡挂载 L2GW + 1 个 HAVIP | 专线/LGW 引流用 |
| 申请管理子网(如 10.0.0.0/24) | L2GW 管理口 eth0,不接入 l2gw 命名空间 |
| 创建 2 台 L2GW 子机,分配管理子网 IP | 可通过管理子网登录 L2GW |
用户 IDC | 创建与云上子网可通信的 IDC-Subnet | 大二层互通 |
| 创建 VXLAN 隧道并分配 IP 地址 | IDC-Switch VTEP |
资源项 | 数量 | 备注 |
L2GW CVM 实例 | 2 台(1 主 1 备) | 按机型选型建议选择规格,可根据流量扩展为多套集群 |
弹性网卡(Underlay 方向) | 2 张 | 每台 L2GW 1 张,纳管为 idc0 |
弹性网卡(VPC 方向) | 4 张 | 子网1、子网2 各 2 张,每台 L2GW 每子网 1 张,纳管为 vpc0 / vpc1 |
HAVIP | 3 个 | 10.96.0.100(idc0)、192.168.1.100(vpc0)、192.168.2.100(vpc1) |
VXLAN 隧道 | 每个大二层子网 1 条 | 目的端口 4789;子网1 用 VNI 2000,子网2 用 VNI 2001 |
Keepalived | 每台 L2GW 1 套 | 版本 v2.1.5,需自行下载安装 |
/data/l2gw 目录下执行。执行前请确认 L2GW 部署包已解压至 /data/ 并已创建软链接 ln -s l2gw_v2.0_xxx l2gw。cd /data/l2gw./l2gw_install_global.sh
项 | 说明 |
命令 | ./l2gw_install_global.sh |
参数 | 无 |
返回值 | 0 = 成功;其他 = 失败 |
l2gw_install_global.sh 添加到 /etc/rc.local 流程中,确保 CVM 重启后初始化参数仍然生效,并在部署后实际重启验证是否生效。l2gw.conf 必须存在且配置合法,否则安装失败。若 VXLAN 大二层经 VPNGW(IPsec)承载,需将 EXTRA_TUNNEL_OVERHEAD 配置为 101。vpcN / idcN,同时完成 IP、选口表与策略路由配置。idc0):VTEP 通信 + VRRP 心跳 + VXLAN 封装源 IP,不可删除。vpc0):VPC 侧引流,对应云上 VM1 所在子网。vpc1):VPC 侧引流,对应云上 VM2 所在子网。# 初始化 Underlay 接口(VTEP 通信 + VRRP 心跳)./l2gw_install_interface.sh add idc 0 eth1 10.96.0.11 "idc0: underlay vtep + vrrp heartbeat"# 初始化 子网1 接口(VPC 引流)./l2gw_install_interface.sh add vpc 0 eth2 192.168.1.21 "vpc0: cloud subnet1 for VM traffic"# 初始化 子网2 接口(VPC 引流)./l2gw_install_interface.sh add vpc 1 eth3 192.168.2.21 "vpc1: cloud subnet2 for VM traffic"
# 添加(自动 down + 改名 + 挪入 + 配 IP/路由/alias)./l2gw_install_interface.sh add <role> <idx> <src_dev> <ip_address> [desc]# 删除(只需 role + idx)./l2gw_install_interface.sh del <role> <idx>
eth0 不纳入 l2gw 命名空间,不调用本脚本。add 为一次性动作,已挪入的网卡再次 add 会失败(返回 104);del 幂等。idc0 所在的 Underlay 子网与其他大二层业务子网(子网1/子网2等)不允许规划在相同或重叠子网内,必须使用独立子网,避免 VTEP 通信/VRRP 心跳与业务大二层流量相互影响。vpcN/idcN 后原系统名不再可见,排查时需通过 MAC 地址 确认网卡对应关系,可用 ip -d link show <vpcN/idcN> 查看 MAC 并与云平台弹性网卡对照。l2gw.conf 计算,默认 1412)、overlay IP、策略路由,以及 proxy_arp=1、rp_filter=0 的设置。# 子网1(VNI=2000)./l2gw_subnet.sh add 2000 idc0 10.96.0.100 10.96.0.21 4789 192.168.1.21 vpc0# 子网2(VNI=2001)./l2gw_subnet.sh add 2001 idc0 10.96.0.100 10.96.0.21 4789 192.168.2.21 vpc1
# 添加子网(建隧道 + 策略路由 + proxy_arp + rp_filter)./l2gw_subnet.sh add <vni> <idc_eth> <local_vtep_ip> <remote_vtep_ip> <dstport> <vpc_eth_ip> <vpc_eth># 删除子网./l2gw_subnet.sh del <vni> <idc_eth> <local_vtep_ip> <vpc_eth>
参数 | 示例值 | 说明 |
vni | 2000 | VXLAN 网络标识,云上云下需一致,每个大二层子网一个 VNI。 |
idc_eth | idc0 | Underlay 侧 ETH 口,即 VTEP underlay 出口。 |
local_vtep_ip | 10.96.0.100 | 本端 VTEP 源 IP,取 Underlay HAVIP,主备漂移时保隧道不断。 |
remote_vtep_ip | 10.96.0.21 | 对端 VTEP IP,即 IDC-Switch 的隧道地址。 |
dstport | 4789 | VXLAN UDP 目的端口,标准值为 4789。 |
vpc_eth_ip | 192.168.1.21 | 配置到 vxlan 口的 overlay IP,取 vpc_eth 对应的子机 IP。 |
vpc_eth | vpc0 | VPC 侧 ETH 口,决定方向路由表号。 |
# 添加云上 VM 路由(使 VM 可被 IDC 侧访问,并发送免费 ARP 通告)./l2gw_ipaddr.sh add_vm vpc0 2000 192.168.1.10./l2gw_ipaddr.sh add_vm vpc1 2001 192.168.2.10# 添加 IDC 本网段路由(不传网关,scope link 二层直连,一条路由覆盖整个本网段)./l2gw_ipaddr.sh add_idc_subnet vpc0 2000 192.168.1.0/24./l2gw_ipaddr.sh add_idc_subnet vpc1 2001 192.168.2.0/24# 添加 IDC 跨子网/缺省路由(传网关,via 网关 onlink,由 Switch 三层转发)./l2gw_ipaddr.sh add_idc_subnet vpc0 2000 0.0.0.0/0 192.168.1.1
./l2gw_ipaddr.sh <action> <vpc_eth> <vni> <参数...>
Action | 说明 | 参数 |
add_vm | 添加云上 VM 明细路由(T_to_VM /32),使 VM 可被 IDC 侧访问,并发送免费 ARP 通告,让 IDC 侧 Switch 刷新 MAC 表把流量引到 L2GW。也用于 IDC→VM 迁移 | <vpc_eth> <vni> <vm_ip> |
del_vm | 删除云上 VM 明细路由。也用于 VM→IDC 迁移,删除 /32 后 T_to_IDC 本网段路由自动覆盖 | <vpc_eth> <vni> <vm_ip> |
add_idc_subnet | 添加云下 IDC 网段路由, gw 可选。不传 gw 为本网段直连(scope link dev vxlan),一条网段路由覆盖整个本网段所有 IDC 主机;传 gw 为跨子网/缺省路由(via <gw> onlink),报文经 Switch 三层网关转发,支持 0.0.0.0/0 缺省路由用于 Internet 访问 | <vpc_eth> <vni> <subnet/mask> [gw] |
del_idc_subnet | 删除云下 IDC 网段路由 | <vpc_eth> <vni> <subnet/mask> |
add_idc_subnet 传入的 gw 必须是当前隧道所在子网在 IDC 侧的网关。/etc/keepalived/keepalived.conf),并按本机实际情况修改:vrrp_instance VI_L2GW {...interface idc0 # 绑定 Underlay 网卡(VTEP 通信口 + VRRP 心跳口)unicast_src_ip 10.96.0.11 # 本机 Underlay IP 地址unicast_peer {10.96.0.12 # 对端设备的 Underlay IP 地址}virtual_ipaddress {10.96.0.100 dev idc0 # Underlay HAVIP(VTEP 源 IP)192.168.1.100 dev vpc0 # 子网1 VPC 引流 HAVIP192.168.2.100 dev vpc1 # 子网2 VPC 引流 HAVIP}...}
# 上线(启动 keepalived)./l2gw_online.sh# 下线(停止 keepalived,流量切换到备机)./l2gw_offline.sh# 在线重载 keepalived 配置(新增/删除 HAVIP 后使用,无需重启)./l2gw_reload.sh
idc0,该网卡不可删除、不可变更,需持续保留。systemctl status keepalived 或查看日志确认主备状态正常。proxy_arp 状态与 ARP 邻居,用于部署后验证与日常排查。./l2gw_route_show.sh
项 | 说明 |
命令 | ./l2gw_route_show.sh |
参数 | 无 |
cd /data/l2gw# 1. 全局初始化./l2gw_install_global.sh# 2. 用户平面 ETH 接口初始化(eth0 管理口不纳入 ns,跳过)./l2gw_install_interface.sh add idc 0 eth1 10.96.0.11 "idc0: underlay vtep + vrrp heartbeat"./l2gw_install_interface.sh add vpc 0 eth2 192.168.1.21 "vpc0: cloud subnet1 for VM traffic"./l2gw_install_interface.sh add vpc 1 eth3 192.168.2.21 "vpc1: cloud subnet2 for VM traffic"# 3. 创建 VXLAN 隧道./l2gw_subnet.sh add 2000 idc0 10.96.0.100 10.96.0.21 4789 192.168.1.21 vpc0./l2gw_subnet.sh add 2001 idc0 10.96.0.100 10.96.0.21 4789 192.168.2.21 vpc1# 4. 配置大二层路由(可提前配置,也可上线后动态添加)# 子网1(vpc0 / VNI=2000)./l2gw_ipaddr.sh add_vm vpc0 2000 192.168.1.10./l2gw_ipaddr.sh add_idc_subnet vpc0 2000 192.168.1.0/24 # 本网段直连./l2gw_ipaddr.sh add_idc_subnet vpc0 2000 0.0.0.0/0 192.168.1.1 # 缺省路由# 子网2(vpc1 / VNI=2001)./l2gw_ipaddr.sh add_vm vpc1 2001 192.168.2.10./l2gw_ipaddr.sh add_idc_subnet vpc1 2001 192.168.2.0/24 # 本网段直连./l2gw_ipaddr.sh add_idc_subnet vpc1 2001 0.0.0.0/0 192.168.2.1 # 缺省路由# 5. 上线(启动 keepalived)./l2gw_online.sh# 6. 验证路由表./l2gw_route_show.sh
idc0 网卡承载 VRRP 心跳通信,创建后永久保留。./l2gw_ipaddr.sh <action> <vpc_eth> <vni> <参数...>,参数与返回值详见「部署最佳实践 > 步骤4:配置大二层路由」。cd /data/l2gw# 新增云上 VM 路由(使 VM 可被 IDC 侧访问,发免费 ARP 通告)./l2gw_ipaddr.sh add_vm <vpc_eth> <vni> <vm_ip># 删除云上 VM 路由./l2gw_ipaddr.sh del_vm <vpc_eth> <vni> <vm_ip># 示例:为子网1(vpc0 / VNI=2000)新增 VM 192.168.1.20./l2gw_ipaddr.sh add_vm vpc0 2000 192.168.1.20
add_idc_subnet 统一管理,分两类:scope link dev vxlan,一条路由覆盖整个本网段所有 IDC 主机,无需逐台添加 /32。via <gw> onlink,报文经 IDC-Switch 三层网关转发。# 新增 IDC 本网段路由(覆盖整个本网段,无需逐台加 /32)./l2gw_ipaddr.sh add_idc_subnet <vpc_eth> <vni> <本网段/mask># 新增 IDC 跨子网/缺省路由(via 网关,Switch 三层转发)./l2gw_ipaddr.sh add_idc_subnet <vpc_eth> <vni> <目标网段/mask> <gw># 删除 IDC 网段路由./l2gw_ipaddr.sh del_idc_subnet <vpc_eth> <vni> <subnet/mask># 示例:子网2(vpc1 / VNI=2001)本网段直连 + 缺省路由./l2gw_ipaddr.sh add_idc_subnet vpc1 2001 192.168.2.0/24./l2gw_ipaddr.sh add_idc_subnet vpc1 2001 0.0.0.0/0 192.168.2.1
add_vm / del_vm 即可,无需专用迁移命令:迁移方向 | 命令 | 原理 |
IDC → VM(IP 上云) | add_vm | T_to_VM 增加 /32 明细路由,优先级高于 T_to_IDC 网段路由;同时发送免费 ARP 通告,IDC 侧 Switch 刷新 MAC 表 |
VM → IDC(IP 下云) | del_vm | T_to_VM 删除 /32 明细路由后,T_to_IDC 本网段路由自动覆盖 |
# IDC IP 迁移到云上 VM(加 T_to_VM /32 + 免费 ARP 通告)./l2gw_ipaddr.sh add_vm <vpc_eth> <vni> <ip># VM IP 迁移到云下 IDC(删 T_to_VM /32,T_to_IDC 本网段路由自动覆盖)./l2gw_ipaddr.sh del_vm <vpc_eth> <vni> <ip># 示例:192.168.1.21 从 IDC 迁移到云上./l2gw_ipaddr.sh add_vm vpc0 2000 192.168.1.21
# 下线(停止 keepalived,流量切换到备机)./l2gw_offline.sh# 上线(启动 keepalived)./l2gw_online.sh# 在线重载 keepalived 配置(新增/删除 HAVIP 后使用)./l2gw_reload.sh
./l2gw_install_interface.sh add <role> <idx> <src_dev> <ip> <desc> 完成初始化。./l2gw_install_interface.sh add vpc 2 eth4 192.168.3.21 "vpc2: cloud subnet3 for VM traffic"
./l2gw_install_interface.sh add 完成初始化。./l2gw_subnet.sh add 2002 idc0 10.96.0.100 10.96.0.21 4789 192.168.3.21 vpc2
./l2gw_ipaddr.sh add_vm vpc2 2002 192.168.3.10./l2gw_ipaddr.sh add_idc_subnet vpc2 2002 192.168.3.0/24
192.168.3.100 dev vpc2)添加至 virtual_ipaddress 配置块中,修改前请先备份配置文件,随后执行 ./l2gw_reload.sh 在线生效,无需重启 Keepalived。virtual_ipaddress 配置块中移除该子网的 HAVIP(如 192.168.3.100 dev vpc2),随后执行 ./l2gw_reload.sh 在线生效。./l2gw_subnet.sh del 2002 idc0 10.96.0.100 vpc2
./l2gw_install_interface.sh del vpc 2
idc0 及其 HAVIP 不可解绑或删除,需长期保留。机器重启│├── 步骤1:逐行执行 l2gw_history_cmd.log 中的命令(恢复网络配置)│└── 步骤2:执行 ./l2gw_online.sh(上线网关 + 启动 keepalived) ← 不可遗漏!
cd /data/l2gw# 1. 查看历史命令cat l2gw_history_cmd.log# 3. 上线./l2gw_online.sh
l2gw_online.sh 步骤不可遗漏。监控项 | 指标 | 告警阈值 |
L2GW CVM 状态 | CVM 运行状态 | 异常关机 |
Keepalived 主备状态 | VRRP 角色 | 主备切换告警 |
网络连通性 | ping 云上 CVM/IDC CVM | 连续 3 次丢包 |
VXLAN 隧道状态 | 隧道接口 UP/DOWN | 接口 DOWN |
弹性网卡 | 网卡绑定状态 | 解绑告警 |
带宽利用率 | 出+入带宽 | 大于 80% 预警 |
HAVIP 绑定状态 | 浮动 IP 归属 | HAVIP 漂移告警 |
l2gw_history_cmd.log 中记录的命令逐行恢复配置。./l2gw_online.sh 上线。idc0)用于 L2GW 主备之间的 VRRP 协议通信。如果该网卡被删除,主备之间将无法检测对方存活状态,可能导致脑裂(两台 L2GW 同时持有 HAVIP),造成网络环路或丢包。误区 | 实际情况 |
L2GW 是腾讯云提供的托管服务 | L2GW 是部署方案而非托管服务。腾讯云提供部署指导与脚本工具,运维由客户负责。 |
腾讯云会监控 L2GW 运行状态 | 腾讯云只监控基础设施层面(物理专线、专线/LGW 设备),不监控 L2GW CVM 内的 Keepalived、VXLAN 隧道、业务路由等。 |
腾讯云负责 L2GW 的版本升级 | L2GW 部署包升级由客户侧运维团队操作,腾讯云提供新版本部署包和技术指导。 |
L2GW 出现问题时可以提工单让腾讯云修复 | 腾讯云支持范围是基础设施和产品缺陷。L2GW 配置层面的问题(如路由配错、Keepalived 配置异常)属于客户运维范畴。 |
故障现象 | 可能原因 | 排查方法 | 解决方案 |
云上云下不通 | VXLAN 隧道异常 | 检查 VXLAN 隧道接口状态 | 重建 VXLAN 隧道 |
主备频繁切换 | VRRP 心跳不稳定 | 检查 idc0 网卡状态和网络延迟 | 优化网络链路或调整 VRRP 超时参数 |
部分 IP 不通 | 路由配置遗漏 | 对比 l2gw_history_cmd.log | 添加缺失的 IP 路由 |
HAVIP 漂移异常 | Keepalived 配置错误 | 检查 virtual_ipaddress 配置 | 修正并执行 l2gw_reload.sh |
重启后业务不通 | 忘记执行上线脚本 | 检查 keepalived 进程状态 | 执行 ./l2gw_online.sh |
日志文件 | 内容 | 用途 |
/data/l2gw/l2gw_history_cmd.log | 历史配置命令 | 重启后恢复配置的参考 |
/var/log/keepalived.log | Keepalived 主备切换日志 | 排查 VRRP 相关故障 |
/var/log/messages | 系统日志 | 排查网卡、内核异常 |
l2gw_history_cmd.log 文件完整性。rc.local 中初始化脚本有效。文档反馈