通过 VPN 隧道路由外部流量

通过 VPN 隧道路由外部流量

我需要帮助创建一个 IP 路由,强制将进入我 VPS 公共 IP 端口 27016 或 3202 的流量传输到我的 Wireguard VPN 隧道。

先简单介绍一下,我创建这个 VPS 是为了允许我使用静态 IP 向公众公开我的 Steam 游戏服务器。我已成功通过 Wireguard 将游戏服务器连接到 VPS;从游戏服务器到 WAN 的所有流量都通过 VPS 路由,但是,入站流量(如服务器查询)不会被路由到 VPN,因此也不会进入游戏服务器。通过在游戏服务器上运行 Wireshark 可以确认这一点。

游戏服务器是托管在 Proxmox 上的 Windows Server 22 VM。VPS 是运行 Ubuntu 22.10 的 DigitalOcean droplet。

我认为路线应该是这样的,但并不完全确定如何正确地完成:

publicIP (eth0 interface) > VPN Tunnel (wg0 interface; 192.168.69.1) > VPN peer (192.168.69.2) > Game server (10.11.12.150)

IP地址

  • VPS 公网 IP:162.243.164.xxx
  • VPN 网关:192.168.69.1
  • 游戏服务器VPN IP:192.168.69.2
  • 游戏服务器本地IP:10.11.12.150

VPS Wireguard 配置

[Interface]
PrivateKey = KEY
Address = 192.168.69.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = KEY
AllowedIPs = 192.168.69.2
PersistentKeepalive = 25

VPS IP 路由

default via 162.243.164.1 dev eth0 proto static 
10.10.0.0/16 dev eth0 proto kernel scope link src 10.10.0.5 
10.116.0.0/20 dev eth1 proto kernel scope link src 10.116.0.2 
162.243.164.0/24 dev eth0 proto kernel scope link src 162.243.164.xxx 
192.168.69.0/24 dev wg0 proto kernel scope link src 192.168.69.1

VPS IP 地址

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 6a:24:cf:89:d5:04 brd ff:ff:ff:ff:ff:ff
        altname enp0s3
        altname ens3
        inet 162.243.164.xxx/24 brd 162.243.164.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet 10.10.0.5/16 brd 10.10.255.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::6824:cfff:fe89:d504/64 scope link 
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether ce:21:97:e6:06:14 brd ff:ff:ff:ff:ff:ff
        altname enp0s4
        altname ens4
        inet 10.116.0.2/20 brd 10.116.15.255 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::cc21:97ff:fee6:614/64 scope link 
           valid_lft forever preferred_lft forever
    5: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
        link/none 
        inet 192.168.69.1/24 scope global wg0
           valid_lft forever preferred_lft forever

TCPDUMP命令:tcpdump -i any -n udp 和端口 27016;结果是查询 publicip:27016 一次得到的。

listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
18:10:47.290457 eth0  In  IP 162.55.52.17.52424 > 162.243.164.xxx.27016: UDP, length 25
18:10:55.926653 eth0  In  IP 141.94.81.117.35441 > 162.243.164.xxx.27016: UDP, length 25

由于我仍在学习,因此如能得到任何帮助/指导我将非常感激。

附加信息

以下是游戏服务器(客户端/对等端)上的 Wireguard 配置

[Interface]
PrivateKey = KEY
Address = 192.168.69.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = KEY
AllowedIPs = 0.0.0.0/0
Endpoint = VPS PUBLIC IP

我尝试过

我曾尝试将以下 IPTables 附加到 VPS 上的 PostUp,但没有成功:

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 27016 -j DNAT --to-destination 192.168.69.1:27016; iptables -A FORWARD -i eth0 -o wg0 -p udp --dport 27016 -j ACCEPT;

我尝试通过运行以下命令来创建 IP 路由和规则:

ip route add table 80 192.168.69.0/24 dev wg0 src 192.168.69.1
ip rule add ipproto udp dport 27016 lookup 80

结果没有变化。

相关内容