V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Anchovy3864
V2EX  ›  宽带症候群

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

  •  
  •   Anchovy3864 · 306 天前 · 1306 次点击
    这是一个创建于 306 天前的主题,其中的信息可能已经有所发展或是发生改变。

    来龙去脉

    我是公网上给资源做种的,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 没设置好,还请各位大神帮忙指点一番

    Anchovy3864
        1
    Anchovy3864  
    OP
       306 天前
    https://www.v2ex.com/t/849522
    好像是少了个-m tcp ?
    Anchovy3864
        2
    Anchovy3864  
    OP
       306 天前
    好吧,就是少了一个-m tcp
    已解决
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3325 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:28 · PVG 20:28 · LAX 04:28 · JFK 07:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.