前言
这才是 VPN(虚拟局域网)
的正确用途。
先根据网上的方法创建一个隧道。
此为同网段NAT-to-NAT
不同网段可以参考网上方案,或者忽略本方案的DHCP修改。
此方案基于OpenWrt,其他Linux版本需要将配置写在WireGuard的配置文件里(网卡的上下线事件)。
测试环境
路由器1:有公网IP地址,做服务器
路由器2:无公网地址,服务器建设在此设备的网络下
需要把对路由器1的访问转发到路由器2对应的设备上
实验步骤
在此步应该已经建立起一个可以通过WireGuard互相访问的隧道
路由器1配置
WireGuard虚拟网卡
需要配置对端设备允许的IP地址,因为我需要访问一个IP段所以添加了 192.168.0.192/26
防火墙
WireGuard虚拟网卡建议单独放一个防火墙
名称随意
开启IP动态伪装(NAT)
, 允许转发到lan,允许来自lan转发。入站、出站、转发建议全部接受。
DHCP
因为两个网段的IP是一样的为了保证 一个IP对应一个设备
,需要对DHCP做限制。
保留一些地址给路由器下的设备使用。
可以使用子网掩码分割地址
本次实验我通过控制DHCP的允许的客户端数量保留 192.168.0.192/26
范围的地址供 路由器2
的设备使用。
静态路由
这个步骤尤为关键, 因为我没有直接修改子网掩码,这一步做网络路由。告诉路由器192.168.0.192/26内的IP地址在别处。
如果是直接修改子网掩码的可以忽略这一步。因为对路由器来说那段地址已经不是它管的了,自然会去其他地方寻找。
根据上面步骤保留的IP地址配置
新建静态路由。
名称 | 内容 |
---|---|
接口 | WireGuard的虚拟网卡 |
目标 | 上面保留的地址,使用CIDR写法列如:IP段192.168.0.192/26或单个地址192.168.0.254/32 |
网关 | 下一跳地址,此处我填10.3.3.2(目标网段路由地址) |
路由器2配置
防火墙
同路由器1配置
WireGuard虚拟网卡建议单独放一个防火墙
名称随意
开启IP动态伪装(NAT)
, 允许转发到lan,允许来自lan转发。入站、出站、转发建议全部接受。
因为路由器1已经开了NAT转换,所以对于路由器2来说是10.3.3.1访问了它。又因为10.3.3.1符合10.3.3.0/24网段,所以可以接受数据包,再经过NAT后访问目的地址。
目的设备也只能知道是10.3.3.1访问了它,这是这个方案的缺陷。
端口映射
现在可以在 路由器1
上 直接映射
路由器2对应 192.168.0.192/26 范围
内设备的端口,就像这个设备本来就在路由器1上一样(跟内网差不多)。
做到这一步,在路由器1上ping路由器2(10.3.3.2)和路由器2上的对应网段的设备(192.168.0.254)应该是可以直接ping通的。