如何通过 WireGuard 将内网服务的端口暴露给公网?

307 天前
 Anchovy3864

来龙去脉

我是公网上给资源做种的,NAS 在家没公网,手头有 VPS ,平常用hotio/qbittorrent通过 WireGuard 连到 VPS
VPS 端用的linuxserver/wireguard
这么做能下载,但是上传效率低,毕竟并没有做端口转发,并没有把 qb 监听的端口开放到公网

服务端

version: '3.9'
services:
  wireguard:
    image: linuxserver/wireguard:latest
    container_name: wireguard
    restart: always
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - SERVERURL=<vps ip>
      - SERVERPORT=51820
      - PEERS=test
      - PEERDNS=auto
      - INTERNAL_SUBNET=10.13.13.0
      - ALLOWEDIPS=0.0.0.0/0
      - LOG_CONFS=false
    volumes:
      - ./wireguard/config:/config
      - /lib/modules:/lib/modules
    ports:
      - 51820:51820
      - 51820:51820/udp
      - 11111:11111
      - 11111:11111/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
[Interface]
Address = 10.13.13.1
ListenPort = 51820
PrivateKey = <private key>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE; iptables -t nat -A PREROUTING -p tcp -i %i --dport 11111 -j DNAT --to-destination 10.13.13.2:11111
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE; iptables -t nat -D PREROUTING -p tcp -i %i --dport 11111 -j DNAT --to-destination 10.13.13.2:11111

[Peer]
PublicKey = ****
PresharedKey = ****
AllowedIPs = 10.13.13.2/32

客户端配置

[Interface]
Address = 10.13.13.2
PrivateKey = <private key>
ListenPort = 51820
DNS = 10.13.13.1

[Peer]
PublicKey = <public key>
PresharedKey = <preshared key>
Endpoint = <vps ip>:51820
AllowedIPs = 0.0.0.0/0

解说

11111 就是假定的 qb 监听端口
其实基本上都是默认配置,我就是在服务端配置的 PostUp 和 PostDown 那两行加了两条 iptables 的命令

iptables -t nat -A PREROUTING -p tcp -i %i --dport 11111 -j DNAT --to-destination 10.13.13.2:11111
iptables -t nat -D PREROUTING -p tcp -i %i --dport 11111 -j DNAT --to-destination 10.13.13.2:11111

恕鄙人不才,这两条 iptables 的命令其实也就是我 google+chatgpt 弄出来的,不知道是不是写错了,各位见笑
因为直接用 qb 并不好测试,所以我其实是在我的电脑上进行测试的
意思是我直接在电脑上用上述客户端配置连接我的 VPS ,然后用python -m http.server 11111开了个文件服务器,然后尝试用<vps ip>:11111访问我这个文件服务器
当然结果就是失败了
个人感觉应该就是 iptables 没设置好,还请各位大神帮忙指点一番

1307 次点击
所在节点    宽带症候群
2 条回复
Anchovy3864
307 天前
https://www.v2ex.com/t/849522
好像是少了个-m tcp ?
Anchovy3864
307 天前
好吧,就是少了一个-m tcp
已解决

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1011006

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX