侧边栏壁纸
博主头像
Cubeiic-HanXuan 博主等级

行动起来,活在当下

  • 累计撰写 7 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

在家=在公司!无需公网IP实现内网无缝访问,本地组网方案开箱即用

寒暄
2025-06-25 / 0 评论 / 0 点赞 / 19 阅读 / 0 字 / 正在检测是否收录...

1 前言

大家好,我是寒暄。

由于我所在的研发部门与公司总部物理位置分离,而核心服务器资源集中部署于总部机房,因此日常工作中需通过公司 VPN(堡垒机)实现安全的内网访问。然而,当前网络链路存在显著瓶颈,高频次的跨地域数据交互导致访问延迟较高,尤其在服务部署、代码拉取等大流量操作场景下,传输效率低下的问题尤为突出,甚至多次出现操作超时中断的情况。鉴于现有远程访问方案对开发效率的实质性制约,经综合评估后,决定自主搭建符合研发场景需求的 VPN 服务,以优化网络连接质量、提升协同开发效能。

2 选择建议总结

经过这几天对不通类型的组网和vpn软件的测试和对比,得到以下总结:

需求场景 推荐方案 特点 部署复杂度
小白用户/家庭组网 Tailscale / ZeroTier 自动穿透,全平台支持,设置简单,但是由于中继转发服务器在国外,所以延迟很高(平均延迟500ms),但是在国内也能用,适合那种只操作ssh需求 ⭐☆☆☆☆(极简)
路由器全局代理 ExpressVPN / Surfshark 提供官方固件,即装即用 ⭐⭐⭐☆☆
自建高性能隧道 WireGuard (支持Docker部署) 使用国内的Endpoint服务能做到低延迟,适合NAS或VPS ⭐⭐⭐☆☆
暴露内网Web服务 FRP / Cloudflare Tunnel 免费、支持HTTPS安全转发 ⭐⭐⭐☆☆
多节点企业互联 Tinc VPN / Netmaker 网状网络,支持复杂拓扑 ⭐⭐⭐⭐☆

在 VPN 搭建场景中,公网 IP 支持是实现稳定连接的基础条件,然而公开网络环境下的免费资源通常伴随带宽瓶颈,难以满足高效数据传输需求。综合技术可行性与成本效益,最终选定 WireGuard 作为内网隧道搭建方案。该方案凭借轻量级、高性能的特性,支持通过 VPS 自建中继节点,可有效突破传统免费服务的带宽限制,显著提升数据传输效率。对比其他解决方案,在国内网络环境下若要实现速度优化,或面临高额成本,或存在较高技术门槛,而 WireGuard 以其轻量化部署与灵活的中继机制,在平衡性能与成本方面展现出显著优势。

3 WireGuard 介绍

WireGuard VPN 的工作原理

deepseek_mermaid_20250624_17c6ac.svg

核心原理说明

1. 加密隧道建立

  • 密钥交换:客户端与服务端通过交换公钥(基于 Curve25519 椭圆曲线)完成身份认证。
  • 会话密钥:使用 HKDF 从预共享密钥(PSK)派生临时会话密钥,保障前向安全性。

2. 数据包处理流程

deepseek_mermaid_20250624_d4e9e0.svg

  • 加密算法:ChaCha20(数据加密) + Poly1305(完整性校验)。
  • 头部开销:仅 20 字节(相比 IPsec 的 50+ 字节更高效)。

3. NAT 穿透

  • 通过 UDP hole punching 技术自动穿透大多数 NAT 设备,无需手动端口映射。

4. 流量路由

[Interface]
Address = 10.8.0.1/24  # 定义VPN子网
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT  # 允许转发流量

4 部署 WireGuard

部署架构图:

部署架构图.svg

安装 WireGuard

首先使用公司不使用的笔记本或者台式机子,或者使用某一台能通内网的服务器都可以。作为WireGuard的服务端,本次我们使用公司不用的笔记本作为服务端

官网地址:https://www.wireguard.com/install/

image-OpLL.png

image-ADiA.png

安装好打开软件,点击左下角的新建隧道中的新建空隧道,如图所示。服务端(公司电脑)和客户端(公司外的电脑)都要下载安装。

image-OqKj.png

  1. 服务端创建隧道:

image-oaLJ.png

配置文件如下:

[Interface]
PrivateKey = qESjFQiT75ka+dgVLVBuTkIzBZXyMJ1/majNJk7l/Es=
ListenPort = 51820
Address = 10.0.0.1/8

[Peer]
PublicKey = n8uo1RkKOuM1p0LpEQDrT3m2jpsKFN/c36dBNnKmMCo=
AllowedIPs = 10.0.0.2/8
PersistentKeepalive = 25

  1. 客户端创建隧道

image-KiDp.png配置文件如下:

[Interface]
PrivateKey = mIFbN0/yntetXWenBC5PT7fks2nfiviC5lRZW1lKNlQ=
Address = 10.0.0.2/8
DNS = 8.8.8.8

[Peer]
PublicKey = v78LQkUI7YSAskWLlp+FWNYzaGnP5PdOrZT82+IVSBY=
AllowedIPs = 10.0.0.0/8, 192.168.199.0/24
Endpoint = 自己的中继服务域名或ip:端口
PersistentKeepalive = 25

5 配置中继流量中转服务

有两种方式,第一种是使用免费的,第二种自己通过VPS自建WireGuard中继服务。我们直接使用免费的。

  • 地址:https://www.luyouxia.com/

我们使用路由侠内网穿透工具来充当udp流量转发服务。他有1g的免费流量可以使用。

image-fPED.png

服务端配置udp流量内网映射

image-LDUe.png

image-OnLy.png

image-njUo.png

创建好后,就可以看到一条映射的公网地址,鼠标右键点击【复制地址】

image-bHgI.png

把从路由侠复制的公网地址粘贴到客户端(公司外的电脑)隧道中的 Endpoint 后,然后点击【保存】即可。

image-RXGT.png

客户端和服务端都配置好之后,启动隧道就可以成功建立链接,这个时候在客户端测试我们的虚拟网络IP,此时已经可以成功访问服务端了。还可以通过服务端本机的ip直接访问服务端。

image-MZtF.png

问题:那现在我在客户端可以访问公司内网中的所有服务器吗?

答案是否定的,我们目前的配置还没有办法访问服务服务器本机意外的服务器,那我应该怎样配置才能达到怎样的效果了。而且公司的服务器,有一些甚至不在同一个路由子网。

6 配置子网路由转发

原理图如下:

deepseek_mermaid_20250624_899f77.svg

1. 配置层(蓝色区域)

  • NAT 创建:New-NetNat 创建地址转换池(10.0.0.0/8)
  • IP 转发:注册表启用 IPEnableRouter=1
  • 目标服务器路由:添加静态路由指向 Windows Server(192.168.200.227)

2. 流量路径(数字标注)

  • 客户端发送加密数据到 WireGuard 服务端(UDP 51820)
  • 服务端解密后交给 Windows Server 物理网卡
  • NAT 网关修改源 IP(客户端 IP → 192.168.200.227)
  • SNAT 转换后流量发往目标服务器
  • 目标服务器通过静态路由返回流量
  • Windows 路由表将流量导向 WireGuard 接口
  • 加密后返回客户端

3. 关键路由关系

deepseek_mermaid_20250624_00fac8.svg

4. 检查和配置NAT

以管理员身份运行PowerShell

# 查看现有NAT配置
Get-NetNat

# 如果没有NAT,创建一个
New-NetNat -Name "WireGuardNAT" -InternalIPInterfaceAddressPrefix "10.0.0.0/8"

5. 确保IP转发已启用

# 检查IP转发状态
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name IPEnableRouter

# 如果不是1,设置为1
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name IPEnableRouter -Value 1

6. 在服务端测试直接连接

# 确认服务端能直接访问目标服务器
ping 192.168.199.9
telnet 192.168.199.9 80

7. 关键配置:在目标服务器添加返回路由

这是最重要的步骤,我们需要配置SNAT让目标服务器认为请求来自Windows服务端

# 添加路由 - 通过默认网关或直接路由
route add 192.168.199.0 mask 255.255.255.0 192.168.200.1 metric 1

# 或者如果在同一个网络段,直接添加
route add 192.168.199.0 mask 255.255.255.0 192.168.200.227 metric 1

# 查看是否添加成功
route print

注意:192.168.199是目标服务器网段(我们客户端想访问的网段),192.168.200 是本机服务器网段(也就是安装vpn服务的机子)

配置完成之后,无论你在任何地方通过WireGuard,就可以像在公司内部访问局域网一样访问公司内部服务器啦。而且WireGuard协议采用双向对称加密。十分安全可靠。

image-vKmB.png

7 总结

对于绝大多数用户:WireGuard 是当前最安全的 VPN 选择,其密码学设计和代码质量远超传统方案。如果大家在工作中也有和我一样的vpn困扰,一起来尝试一下吧,有什么问题都可以在留言区留言。

0

评论区