跳转到内容

Windows 笔记本共享 VPN 给局域网服务器

本文记录一次已实际验证成功的网络配置:让局域网 Linux 小服务器通过 Windows 11 笔记本的锐捷 SSLVPN 访问公司内网服务。

安全提示:这会让服务器借用公司 VPN 访问内网。使用前应确认符合公司的网络安全规定,不要把不必要的服务器服务暴露到公司网络。

一、最终拓扑

text
Linux 小服务器
192.168.0.100
        │ 静态路由:公司网段 via 192.168.0.4

Windows 笔记本 WLAN 2
192.168.0.4
        │ WinNAT

锐捷 SSLVPN 虚拟网卡
172.16.10.179
        │ VPN 下一跳:172.16.10.1

公司内网服务
172.16.3.6:8589

二、已验证的设备信息

项目
Windows 版本Windows 11 专业版,Build 26200
笔记本局域网接口WLAN 2
笔记本局域网地址192.168.0.4/24
普通路由器192.168.0.1
VPN 接口本地连接* 1
VPN 驱动RuiJie SSLVPN Virtual Network Card
VPN 地址172.16.10.179
VPN 下一跳172.16.10.1
Linux 服务器192.168.0.100
Linux 服务器无线接口wlx6c1ff72adc37
公司测试服务http://172.16.3.6:8589/

已验证公司服务在 Windows 笔记本本机可访问,并返回 HTTP 200 OK

三、Windows 配置

以下命令需要在管理员 PowerShell中执行。

1. 开启两个接口的 IPv4 转发

powershell
Set-NetIPInterface `
    -InterfaceAlias "WLAN 2" `
    -AddressFamily IPv4 `
    -Forwarding Enabled

Set-NetIPInterface `
    -InterfaceAlias "本地连接* 1" `
    -AddressFamily IPv4 `
    -Forwarding Enabled

检查:

powershell
Get-NetIPInterface `
    -InterfaceAlias "WLAN 2","本地连接* 1" `
    -AddressFamily IPv4 |
    Select-Object InterfaceAlias,InterfaceIndex,Forwarding,ConnectionState

两个接口都应为:

text
Forwarding : Enabled

2. 创建 WinNAT

本次最终验证使用的是局域网前缀 /24,不是最初尝试的 /32

powershell
# 如果存在旧的测试 NAT,先删除;确认名称后再执行
Remove-NetNat -Name "CorpVpnNat" -Confirm:$false -ErrorAction SilentlyContinue

New-NetNat `
    -Name "CorpVpnNat" `
    -InternalIPInterfaceAddressPrefix "192.168.0.0/24"

检查:

powershell
Get-NetNat |
    Select-Object Name,InternalIPInterfaceAddressPrefix,ExternalIPInterfaceAddressPrefix,Active

成功状态:

text
Name       : CorpVpnNat
Prefix     : 192.168.0.0/24
Active     : True

虽然 NAT 前缀是 /24,但服务器是否经过笔记本由服务器的静态路由决定;其他局域网设备仍使用自己的默认网关 192.168.0.1

四、Linux 服务器路由

服务器默认网关保持普通路由器,不要改成笔记本:

bash
sudo ip route replace default via 192.168.0.1

添加公司网段路由:

bash
sudo ip route replace 10.0.0.0/8 via 192.168.0.4
sudo ip route replace 172.16.0.0/16 via 192.168.0.4
sudo ip route replace 192.168.0.0/16 via 192.168.0.4

当前服务器实际路由如下:

text
default via 192.168.0.1 dev wlx6c1ff72adc37 proto static metric 600
10.0.0.0/8 via 192.168.0.4 dev wlx6c1ff72adc37
172.16.0.0/16 via 192.168.0.4 dev wlx6c1ff72adc37
192.168.0.0/24 dev wlx6c1ff72adc37 proto kernel scope link src 192.168.0.100 metric 600
192.168.0.0/16 via 192.168.0.4 dev wlx6c1ff72adc37

其中本地直连路由 192.168.0.0/24 比公司范围路由 192.168.0.0/16 更具体,因此局域网内地址仍直接访问。

检查目标路由:

bash
ip route get 172.16.3.6

应包含:

text
172.16.3.6 via 192.168.0.4 dev wlx6c1ff72adc37 src 192.168.0.100

五、功能验证

1. TCP 端口

bash
nc -vz -w 10 172.16.3.6 8589

成功输出:

text
Connection to 172.16.3.6 8589 port [tcp/*] succeeded!

2. HTTP 页面

bash
curl -v --connect-timeout 10 http://172.16.3.6:8589/

本次真实验证结果:

text
Established connection to 172.16.3.6 (172.16.3.6 port 8589)
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

3. Windows 侧观察 NAT 会话

在服务器发起 curl 时,管理员 PowerShell 执行:

powershell
Get-NetNatSession |
    Where-Object {
        $_.InternalSourceAddress -eq "192.168.0.100"
    } |
    Select-Object `
        InternalSourceAddress,
        InternalSourcePort,
        InternalDestinationAddress,
        InternalDestinationPort,
        ExternalSourceAddress,
        ExternalSourcePort,
        ExternalDestinationAddress,
        ExternalDestinationPort,
        Protocol

本次真实会话显示:

text
InternalSourceAddress      192.168.0.100
InternalDestinationAddress 172.16.3.6
ExternalSourceAddress      172.16.10.179
ExternalDestinationAddress 172.16.3.6
Protocol                    6 (TCP)

这证明服务器流量已经经过 Windows NAT,并以 VPN 地址进入公司网络。

六、故障排查

路由正确但连接超时

先在 Windows 本机确认:

powershell
Test-NetConnection 172.16.3.6 -Port 8589 -InformationLevel Detailed

本机应显示:

text
InterfaceAlias : 本地连接* 1
SourceAddress  : 172.16.10.179
TcpTestSucceeded : True

再检查:

powershell
Get-NetNat
Get-NetNatSession
Get-NetIPInterface -AddressFamily IPv4 |
    Where-Object {
        $_.InterfaceAlias -in @("WLAN 2","本地连接* 1")
    } |
    Select-Object InterfaceAlias,Forwarding,ConnectionState

如果 NAT 会话中出现:

text
192.168.0.100 → 172.16.3.6
外部源地址   → 172.16.10.179

说明转发已经成功。

小包能通、大流量卡住

VPN 接口 MTU 实测为 1344。可临时降低 Linux 无线接口 MTU:

bash
sudo ip link set dev wlx6c1ff72adc37 mtu 1300

确认 MTU 问题后,再按服务器网络管理方式持久化设置。

VPN 重连后访问失败

检查锐捷接口是否仍开启转发:

powershell
Get-NetIPInterface `
    -InterfaceAlias "本地连接* 1" `
    -AddressFamily IPv4 |
    Select-Object InterfaceAlias,Forwarding,ConnectionState

如果变回 Disabled:

powershell
Set-NetIPInterface `
    -InterfaceAlias "本地连接* 1" `
    -AddressFamily IPv4 `
    -Forwarding Enabled

七、配置持久化

Ubuntu/Netplan

把路由合并到现有网卡配置,不要覆盖原有地址和网关。例如:

yaml
network:
  version: 2
  ethernets:
    <实际网卡名>:
      routes:
        - to: 10.0.0.0/8
          via: 192.168.0.4
        - to: 172.16.0.0/16
          via: 192.168.0.4
        - to: 192.168.0.0/16
          via: 192.168.0.4

应用前:

bash
sudo netplan try

确认没有断网后:

bash
sudo netplan apply

Windows NAT 和接口转发也应在 Windows 重启、锐捷 VPN 重连后重新检查。

八、回滚

Windows

管理员 PowerShell:

powershell
Remove-NetNat -Name "CorpVpnNat" -Confirm:$false

Set-NetIPInterface `
    -InterfaceAlias "WLAN 2" `
    -AddressFamily IPv4 `
    -Forwarding Disabled

Set-NetIPInterface `
    -InterfaceAlias "本地连接* 1" `
    -AddressFamily IPv4 `
    -Forwarding Disabled

Linux

bash
sudo ip route del 10.0.0.0/8 via 192.168.0.4
sudo ip route del 172.16.0.0/16 via 192.168.0.4
sudo ip route del 192.168.0.0/16 via 192.168.0.4
sudo ip route replace default via 192.168.0.1

九、最小日常检查清单

  1. 笔记本已连接锐捷 SSLVPN。
  2. Windows 本机能打开 http://172.16.3.6:8589/
  3. WLAN 2本地连接* 1 的 Forwarding 为 Enabled。
  4. CorpVpnNat 为 Active。
  5. 服务器 ip route get 172.16.3.6 显示下一跳 192.168.0.4
  6. 服务器执行 curl --connect-timeout 10 http://172.16.3.6:8589/ 返回 HTTP 200

基于 MIT 许可发布