把VPS的公网IP通过VPN隧道转发给其他设备
63
当我们使用frp之类的内网穿透工具时,虽然能够让内网服务获得公网访问能力,但存在一个关键问题:不是所有应用都能通过Proxy protocol获取真实的客户端IP地址。本文通过建立VPS与家庭网络之间的VPN隧道,将VPS的公网IP直接"借给"家庭网络中的设备使用,实现真正的IP地址透传。
网络拓扑
Internet ←→ VPS(公有云) ←→ WireGuard ←→ 家庭路由器 ←→ 内网设备
↑ ↑ ↑
网卡IP: 192.168.0.79 内网IP: 192.168.100.1 目标设备: 192.168.100.10
WG IP: 100.65.0.1 WG IP: 100.65.0.2
EIP:1.2.3.4VPS端
# 1. 开启IP转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# 先排除 WG端口不转发
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 12321 -j ACCEPT
# 2. 配置 iptables NAT 规则
# 将外网访问的流量转发到 100.65.0.2
iptables -t nat -A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 100.65.0.2
iptables -t nat -A PREROUTING -i eth0 -p udp -j DNAT --to-destination 100.65.0.2
# 3. 配置 MASQUERADE(让回程流量正确返回)
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
# 4. 允许流量通过 FORWARD 链
iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT本地路由器
# 开启IP转发
echo 'net.ipv4.ip_forward=1' | tee -a /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
# 让从WireGuard来的流量能访问内网
iptables -t nat -A POSTROUTING -s 100.65.0.0/24 -d 192.168.100.0/24 -j MASQUERADE
# 或者如果要将所有外部流量转发到防火墙处理
iptables -t nat -A PREROUTING -i wg0 ! -d 192.168.100.0/24 -j DNAT --to-destination 192.168.100.10把VPS的公网IP通过VPN隧道转发给其他设备
https://imoe.ac.cn/archives/ba-vpsde-gong-wang-iptong-guo-vpnsui-dao-zhuan-fa-gei-qi-ta-she-bei