前言
最近遇到一个wg节点之间相互访问的问题,记录一下操作过程
问题
涉及机器
- 机器A(linux) 172.40.100.3
- 本机B(windows) 172.32.100.2(vpn1),172.40.100.2(vpn2)
描述
机器A有一个需求,那就是访问172.32.100.6的流量时需要把流量转发给本机B,由本机B去代为请求,并正确响应,其中172.32.100.0/24(vpn1)与172.40.100.0/24(vpn2)分别隶属不同的wg peer端
解决步骤
机器A增加路由
首先机器A的AllowedIPs中需要增加一个172.32.100.6/32的路由,具体作用为当机器A访问172.32.100.6的相关流量时会走当前(vpn2)的网卡
vpn2服务端增加路由转发
接下来去172.40.100.0/24组网的wg服务端中,在wg的conf中的对应peer(172.40.100.2)中的AllowedIPs也增加172.32.100.6/32,目的为了当流量到服务端时,转发给本机A节点
验证机器A -> 本机B
此时本机B使用wireshark抓包vpn2网卡,在机器A中ping 172.32.100.6, 会发现已经可以抓到流量了
本机B配置IP转发
因为本机B是windows所以默认没有开启ip转发,执行命令
Set-NetIPInterface -InterfaceAlias "vpn1" -Forwarding Enabled
Set-NetIPInterface -InterfaceAlias "vpn2" -Forwarding Enabled该命令的作用为将vpn1和vpn2开启ip转发,可以让vpn2的目标ip为172.32.100.6的流量转发给vpn1,但注意该命令非持久化,重启电脑或者网卡重新开启关闭就会失效,最好写到wg脚本中
//查看各个网卡转发是否开启
Get-NetIPInterface | Select-Object ifIndex,InterfaceAlias,AddressFamily,Forwarding验证vpn2 -> vpn1
此时本机B使用wireshark抓包vpn1网卡,在机器A中ping 172.32.100.6, 会发现已经可以抓到流量了,172.40.100.x -> 172.32.100.6
进行SNAT
此时虽然vpn1可以收到,但是因为源ip为172.40.100.x, 所以回包可能会出现问题,此时需要做一个snat,执行命令
New-NetNat -Name "wg-nat" -InternalIPInterfaceAddressPrefix 172.40.100.0/24该命令的作用是创建一个wg-nat规则,可以更改源ip,
粗暴理解:当某个包从A网卡到B网卡的时候,B网卡会收到的源IP会改为B网卡的IP
AI解释:当一个包从A网卡进入 → 被系统转发 → 从B网卡发出时 → 发出时源IP会被改成B网卡的IP(如果命中NAT规则)
- 包进入(zgbzw2), 不改
- 系统决定转发 , 查路由
- 从 vpn 发出去 , 此时 NAT 生效 , 改源IP
//获取nat规则
Get-NetNat
//删除nat规则
Remove-NetNat -Name "wg-nat"验证
此时在机器A中ping 172.32.100.6即可成功
评论 (0)