V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eunrui
V2EX  ›  程序员

WireGuard 如何直接使用局域网的 IP 访问

  •  1
     
  •   eunrui · 3 天前 · 2057 次点击
    本地 阿里云服务器 公司内网
    虚拟 IP(wireguard) 10.0.8.2 10.0.8.1(服务端) 10.0.8.3
    实际 IP 192.168.1.47 x.x.x.x 192.168.11.222

    阿里云上部署用的wg-easy,以下是默认的配置

    # Note: Do not edit this file directly.
    # Your changes will be overwritten!
    
    # Server
    [Interface]
    PrivateKey = KA8QwuT3CzNNGGWD9iXl7YxSqtI5urW89+k8oO5bDWM=
    Address = 10.0.8.1/24
    ListenPort = 51820
    PreUp = 
    PostUp =  iptables -t nat -A POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 
    PreDown = 
    PostDown =  iptables -t nat -D POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; 
    
    
    # Client: test (6a258866-5164-4ecc-9873-2b1cc4dc6806)
    [Peer]
    PublicKey = 1jGq3SNpQhm0ucRGpNevW0dnAVYk3y5aFTdb5mk4EHg=
    PresharedKey = V9iL5IfalLvZiuGeXRZe3EUtutLnBXJYs5R90RNsbSs=
    AllowedIPs = 10.0.8.2/32
    
    # Client: server (9d0012cd-0248-4ee8-b845-c3cbf07172d7)
    [Peer]
    PublicKey = UqJD/AaTXBLi1kAMZn99TT4eapO8hdtAmyUeK9TdkhY=
    PresharedKey = r2WVnILyhEsZNhRhDN5dcfP84xLrQ6/Z9ohGSq0rNLs=
    AllowedIPs = 10.0.8.3/32
    

    目前按照上面的虚拟 ip ,可以互相 ping 通,但是没办法直接访问局域网中的 IP ,看过这个帖子/t/857269,按照 1 楼 V 友说的配置的 iptables ,添加到了内网服务器上 wireguard 配置,如下

    [Interface]
    PrivateKey = qGn5f2GtvQm/5GmudGGgdzb2IBt4nzZYudYDvVfd0H8=
    Address = 10.0.8.3/24
    DNS = 114.114.114.114
    
    PreUp=iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.11.222
    PostDown=iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.11.222
    
    [Peer]
    PublicKey = cXPP7xJXo/QDDiEiwEfuDsUq1ytjSXsulawokP4eg3Q=
    PresharedKey = r2WVnILyhEsZNhRhDN5dcfP84xLrQ6/Z9ohGSq0rNLs=
    AllowedIPs = 10.0.8.0/24
    PersistentKeepalive = 25
    Endpoint = xx.xx.xx.xx:51820
    

    加完虚拟 ip 都无法 ping 通了,请教下大家,这个该怎么加呢。

    以下是 wg-easy 分配给我本地的客户端

    [Interface]
    PrivateKey = IPh0aFShR2hw+53TPLiXvt7kLofdjkxYSPLhG4yvMnc=
    Address = 10.0.8.2/24
    DNS = 114.114.114.114
    
    [Peer]
    PublicKey = cXPP7xJXo/QDDiEiwEfuDsUq1ytjSXsulawokP4eg3Q=
    PresharedKey = V9iL5IfalLvZiuGeXRZe3EUtutLnBXJYs5R90RNsbSs=
    AllowedIPs = 10.0.8.0/24, 192.168.11.0/24
    Endpoint = xx.xx.xx.xx:51820
    PersistentKeepalive = 25
    
    第 1 条附言  ·  3 天前
    # Note: Do not edit this file directly.
    # Your changes will be overwritten!
    
    # Server
    [Interface]
    PrivateKey = KA8QwuT3CzNNGGWD9iXl7YxSqtI5urW89+k8oO5bDWM=
    Address = 10.0.8.1/24
    ListenPort = 51820
    PreUp = 
    PostUp =  iptables -t nat -A POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 
    PreDown = 
    PostDown =  iptables -t nat -D POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; 
    
    
    # Client: test (6a258866-5164-4ecc-9873-2b1cc4dc6806)
    [Peer]
    PublicKey = 1jGq3SNpQhm0ucRGpNevW0dnAVYk3y5aFTdb5mk4EHg=
    PresharedKey = V9iL5IfalLvZiuGeXRZe3EUtutLnBXJYs5R90RNsbSs=
    AllowedIPs = 10.0.8.2/32
    
    # Client: server (9d0012cd-0248-4ee8-b845-c3cbf07172d7)
    [Peer]
    PublicKey = UqJD/AaTXBLi1kAMZn99TT4eapO8hdtAmyUeK9TdkhY=
    PresharedKey = r2WVnILyhEsZNhRhDN5dcfP84xLrQ6/Z9ohGSq0rNLs=
    AllowedIPs = 10.0.8.3/32,192.168.11.222
    

    要把服务端的AllowedIPs中加上内网的网段,就能访问内网了,但是现在只能连222,其他的资源还是不能访问,还在摸索

    第 2 条附言  ·  3 天前

    搞定了,总结一下

    服务端

    [Interface]
    PrivateKey = KA8QwuT3CzNNGGWD9iXl7YxSqtI5urW89+k8oO5bDWM=
    Address = 10.0.8.1/24
    ListenPort = 51820
    PreUp = 
    PostUp =  iptables -t nat -A POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 
    PreDown = 
    PostDown =  iptables -t nat -D POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; 
    
    # Client: test (6a258866-5164-4ecc-9873-2b1cc4dc6806)
    [Peer]
    PublicKey = 1jGq3SNpQhm0ucRGpNevW0dnAVYk3y5aFTdb5mk4EHg=
    PresharedKey = V9iL5IfalLvZiuGeXRZe3EUtutLnBXJYs5R90RNsbSs=
    AllowedIPs = 10.0.8.2/32
    
    # Client: server (9d0012cd-0248-4ee8-b845-c3cbf07172d7)
    [Peer]
    PublicKey = UqJD/AaTXBLi1kAMZn99TT4eapO8hdtAmyUeK9TdkhY=
    PresharedKey = r2WVnILyhEsZNhRhDN5dcfP84xLrQ6/Z9ohGSq0rNLs=
    AllowedIPs = 10.0.8.3/32
    
    第 3 条附言  ·  3 天前

    刚才手抖按错了。。

    服务端

    [Interface]
    PrivateKey = 
    Address = 10.0.8.1/24
    ListenPort = 51820
    PreUp = 
    PostUp =  iptables -t nat -A POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 
    PreDown = 
    PostDown =  iptables -t nat -D POSTROUTING -s 10.0.8.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; 
    
    # Client: test (6a258866-5164-4ecc-9873-2b1cc4dc6806)
    [Peer]
    PublicKey = 
    PresharedKey = 
    AllowedIPs = 10.0.8.2/32
    
    # Client: server (9d0012cd-0248-4ee8-b845-c3cbf07172d7)
    [Peer]
    PublicKey = 
    PresharedKey =
    AllowedIPs = 10.0.8.3/32, 192.168.11.0/24
    

    对内网做转发的服务器Peer的AllowedIPs里要加上想要访问的网段 192.168.11.0/24 这里的PreUp、PreDown、PostUp、PostDown是wg-easy自己生成的

    内网服务器

    [Interface]
    PrivateKey = 
    Address = 10.0.8.3/24
    DNS = 114.114.114.114
    
    # packet forwarding
    PostUp = sysctl -w net.ipv4.ip_forward=1
    # packet masquerading
    PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostUp = iptables -A FORWARD -i wg0 -o eth0 -s 10.0.8.0/24 -d 192.168.11.0/24 -j ACCEPT
    PostUp = iptables -A FORWARD -i eth0 -o wg0 -s 192.168.11.0/24 -d 10.0.8.0/24 -j ACCEPT
    
    PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -o eth0 -s 10.0.8.0/24 -d 192.168.11.0/24 -j ACCEPT
    PostDown = iptables -D FORWARD -i eth0 -o wg0 -s 192.168.11.0/24 -d 10.0.8.0/24 -j ACCEPT
    
    [Peer]
    PublicKey = 
    PresharedKey = 
    AllowedIPs = 10.0.8.0/24
    PersistentKeepalive = 15
    Endpoint = 公网IP:51820
    

    这里的AllowedIPs只能填写wireguard的虚拟ip网段10.0.8.0/24
    由于超出字数限制了,截了下半部分,同时把密钥部分去掉了

    第 4 条附言  ·  3 天前

    本地

    [Interface]
    PrivateKey = 
    Address = 10.0.8.2/24
    DNS = 114.114.114.114
    
    [Peer]
    PublicKey = 
    PresharedKey = 
    AllowedIPs = 10.0.8.0/24, 192.168.11.0/24
    Endpoint = 公网IP:51820
    PersistentKeepalive = 15
    

    目前存在的坑

    由于wg-easy在web页面上暂时不能编辑客户端的AllowIPs,所以只能手动进入容器,给服务端配置中,内网的Peer下AllowIPs加上内网网段。 不过这个问题已经在issue759issue997中被解决,将作为新的feature发布。

    34 条回复    2024-07-04 22:54:41 +08:00
    kivmi
        1
    kivmi  
       3 天前   ❤️ 1
    Endpoint 能不能暴露出来
    javazero
        2
    javazero  
       3 天前   ❤️ 1
    你要 ping 某个机器的内网 ip 。就要在除了这个机器的 wg 配置里添加 机器的 ip (网段)

    反向同理
    ovoo
        3
    ovoo  
       3 天前 via Android   ❤️ 1
    楼主的意思是 192.168.1.47 需要使用 192.168.11.222 直接访问内网服务器?
    最简单的方法是修改 wg-wasy 生成的配置,
    Client:Server 的 Allow IP
    kivmi
        4
    kivmi  
       3 天前   ❤️ 1
    你做 NAT 转换的机器 192.168.11.222 是防火墙吗?
    bouts0309
        5
    bouts0309  
       3 天前   ❤️ 1
    看起来貌似是云服务器上的 AllowedIPs 设置的问题?
    ovoo
        6
    ovoo  
       3 天前 via Android   ❤️ 1
    @ovoo 接楼上, 修改 AllowIPS ,添加 192.168.11.222/32
    spencerseth44
        7
    spencerseth44  
       3 天前   ❤️ 1
    我最近也碰到这个问题,我是希望本地的笔记本,能访问公司内网的其他网络设备,我在网上查资料说的是要在公司内网环境里面配置静态路由,不过目前还没有折腾成功
    eunrui
        8
    eunrui  
    OP
       3 天前
    @kivmi 能暴露出来
    eunrui
        9
    eunrui  
    OP
       3 天前
    @javazero 我试试
    eunrui
        10
    eunrui  
    OP
       3 天前
    @ovoo 加了的,docker 启动的时候有给,
    ```
    docker run -d \
    --name=wg-easy \
    -e WG_HOST=xx.xx.xx.xx \
    -e PASSWORD=xxxxxxxxxxx \
    -e WG_DEFAULT_ADDRESS=10.0.8.x \
    -e WG_DEFAULT_DNS=114.114.114.114 \
    -e WG_ALLOWED_IPS=10.0.8.0/24,192.168.11.0/24 \ <===========================
    -e WG_PERSISTENT_KEEPALIVE=25 \
    -e LANG=chs \
    -v ~/.wg-easy:/etc/wireguard \
    -p 51820:51820/udp \
    -p 51821:51821/tcp \
    --cap-add=NET_ADMIN \
    --cap-add=SYS_MODULE \
    --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
    --sysctl="net.ipv4.ip_forward=1" \
    --restart always\
    ghcr.io/wg-easy/wg-easy
    ```
    eunrui
        11
    eunrui  
    OP
       3 天前
    @kivmi 不是防火墙,就是一台内网的机器,因为我想访问的那台是麒麟信安的系统,他们还没对 wireguard 提供支持,所以就想着要不把内网 192.168.11.0 段的都能访问算了
    eunrui
        12
    eunrui  
    OP
       3 天前
    @bouts0309 server 上在启动的时候给了-e WG_ALLOWED_IPS=10.0.8.0/24,192.168.11.0/24
    eunrui
        13
    eunrui  
    OP
       3 天前
    @ovoo 启动的时候有给 192.168.11.0/24 ,我试试直接指定这个
    eunrui
        14
    eunrui  
    OP
       3 天前
    @spencerseth44 是的,我也是想这么做,[/t/857269]( https://www.v2ex.com/t/857269) 这个帖子也是这么说,不过到现在配置的一头雾水
    eunrui
        15
    eunrui  
    OP
       3 天前
    @javazero 现在应该就是这样的,server 和本地都 AllowedIPs = 10.0.8.0/24, 192.168.11.0/24 了,内网服务器 AllowedIPs =10.0.8.0/24
    ovoo
        16
    ovoo  
       3 天前
    @spencerseth44 这个需要公司内网里有一台服务器安装 wireguard ( 配置 IP 转发 和 MASQUERADE ) ,内网 IP 加入到 笔记本的 AllowIPs 配置里即可,不用配置静态路由。反过来内网没有安装 wireguard 的机器访问笔记本才需要配置静态路由。
    eunrui
        17
    eunrui  
    OP
       3 天前
    @ovoo 嗯呢,192.168.11.222 就是我在内网中安装 wireguard 的服务器,因为网络这块儿我不是很懂,chatgpt 问了一些规则,不知道是不是你说的转发那些
    ```
    PreUp = sysctl -w net.ipv4.ip_forward=1

    PreUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PreUp = iptables -A FORWARD -i wg0 -o eth0 -s 10.0.8.0/24 -d 192.168.11.0/24 -j ACCEPT
    PreUp = iptables -A FORWARD -i eth0 -o wg0 -s 192.168.11.0/24 -d 10.0.8.0/24 -j ACCEPT

    PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -o eth0 -s 10.0.8.0/24 -d 192.168.11.0/24 -j ACCEPT
    PostDown = iptables -D FORWARD -i eth0 -o wg0 -s 192.168.11.0/24 -d 10.0.8.0/24 -j ACCEPT
    ```
    这样配置还是笔记本还是没法 ping 内网,笔记本配置的 AllowIPs=10.0.8.0/24, 192.168.11.0/24 ,
    目前还是只有 10.0.8.1 、.2 、.3 这三个能互相 ping 通,上面的规则有什么错误的地方吗,希望指点一下
    eunrui
        18
    eunrui  
    OP
       3 天前
    ➜ ~ ping 10.0.8.1
    PING 10.0.8.1 (10.0.8.1): 56 data bytes
    64 bytes from 10.0.8.1: icmp_seq=0 ttl=64 time=149.753 ms
    64 bytes from 10.0.8.1: icmp_seq=1 ttl=64 time=192.396 ms
    64 bytes from 10.0.8.1: icmp_seq=2 ttl=64 time=236.938 ms
    64 bytes from 10.0.8.1: icmp_seq=3 ttl=64 time=260.519 ms
    64 bytes from 10.0.8.1: icmp_seq=4 ttl=64 time=24.365 ms
    64 bytes from 10.0.8.1: icmp_seq=5 ttl=64 time=24.365 ms
    64 bytes from 10.0.8.1: icmp_seq=6 ttl=64 time=24.495 ms
    ^C
    --- 10.0.8.1 ping statistics ---
    7 packets transmitted, 7 packets received, 0.0% packet loss
    round-trip min/avg/max/stddev = 24.365/130.404/260.519/97.249 ms

    ➜ ~ ping 10.0.8.3
    PING 10.0.8.3 (10.0.8.3): 56 data bytes
    64 bytes from 10.0.8.3: icmp_seq=0 ttl=63 time=44.425 ms
    64 bytes from 10.0.8.3: icmp_seq=1 ttl=63 time=46.835 ms
    64 bytes from 10.0.8.3: icmp_seq=2 ttl=63 time=44.923 ms
    64 bytes from 10.0.8.3: icmp_seq=3 ttl=63 time=46.621 ms
    ^C
    --- 10.0.8.3 ping statistics ---
    4 packets transmitted, 4 packets received, 0.0% packet loss
    round-trip min/avg/max/stddev = 44.425/45.701/46.835/1.045 ms

    ➜ ~ ping 192.168.11.222
    PING 192.168.11.222 (192.168.11.222): 56 data bytes
    Request timeout for icmp_seq 0
    Request timeout for icmp_seq 1
    ^C
    --- 192.168.11.222 ping statistics ---
    3 packets transmitted, 0 packets received, 100.0% packet loss

    ➜ ~ ping 192.168.11.215
    PING 192.168.11.215 (192.168.11.215): 56 data bytes
    Request timeout for icmp_seq 0
    Request timeout for icmp_seq 1
    Request timeout for icmp_seq 2
    ^C
    --- 192.168.11.215 ping statistics ---
    4 packets transmitted, 0 packets received, 100.0% packet loss
    isAK47
        19
    isAK47  
       3 天前   ❤️ 1
    试试 192.168.11.0/24 -->192.168.0.0/16 ,还不行的话重点看两边的防火墙
    shiyuu
        20
    shiyuu  
       3 天前   ❤️ 1
    给你一个思路吧,首先服务端的 IPV4 转发要开启,也就是 net.ipv4.ip_forward=1 ,如果客户端是 linux 也要打开。

    然后服务端和 peer 端的[Interface]下都要加上这条,你是用的 IP 写,我是直接写的端口,自己改成自己对应的端口,也就是服务端和 peer 端都要用 iptables 的策略接管,进行流量的转发,没有 iptables 服务就要装 iptables 服务,把别的防火墙关掉。

    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT;iptables -A FORWARD -o wg0 -j ACCEPT;iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;iptables -I INPUT -i wg0 -j ACCEPT;

    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT;iptables -D FORWARD -o wg0 -j ACCEPT;iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;iptables -D INPUT -i wg0 -j ACCEPT;

    # 重要:仔细理解我下面这句话,理解这个是关键的。
    服务端的[Peer]参数中,AllowedIPs = 意思是指定 IP 段通过这个[Peer]进行传输

    客户端的[Peer]参数中(我这个客户端指的就是电脑、手机等)
    AllowedIPs = 意思是电脑访问这个 IP 段都通过 wiregurd 隧道进行传输


    你的服务器端[Peer]就应该要写成这样,这个服务端 AllowedIPs 的意思就是,整个 wg 通道中,
    ```sh
    # Client: test (6a258866-5164-4ecc-9873-2b1cc4dc6806)
    [Peer]
    PublicKey = 1jGq3SNpQhm0ucRGpNevW0dnAVYk3y5aFTdb5mk4EHg=
    PresharedKey = V9iL5IfalLvZiuGeXRZe3EUtutLnBXJYs5R90RNsbSs=
    AllowedIPs = 10.0.8.2/32,192.168.1.0/24

    # Client: server (9d0012cd-0248-4ee8-b845-c3cbf07172d7)
    [Peer]
    PublicKey = UqJD/AaTXBLi1kAMZn99TT4eapO8hdtAmyUeK9TdkhY=
    PresharedKey = r2WVnILyhEsZNhRhDN5dcfP84xLrQ6/Z9ohGSq0rNLs=
    AllowedIPs = 10.0.8.3/32,192.168.11.0/24
    ```

    然后你的客户端的[Peer]是这样没有问题
    ```sh
    [Peer]
    PublicKey = cXPP7xJXo/QDDiEiwEfuDsUq1ytjSXsulawokP4eg3Q=
    PresharedKey = V9iL5IfalLvZiuGeXRZe3EUtutLnBXJYs5R90RNsbSs=
    AllowedIPs = 10.0.8.0/24, 192.168.11.0/24
    Endpoint = xx.xx.xx.xx:51820
    PersistentKeepalive = 25
    ```

    # 整个思路串联起来就是:客户端访问 192.168.11.0/24 地址段,就会被电脑丢到 wg 的通道中,192.168.11.0/24 地址段到了服务端,服务端会进行识别,把数据丢到你的# Client: server 这个通道中,因为# Client: server 里[Peer]的 AllowedIPs 已经写了 192.168.11.0/24 往我这里走

    # 慢慢理解吧


    下面是添加 iptables 参数的解释,PostDown 反之就是执行删除了。

    ```sh
    PostUp 表示在 WireGuard 接口启动后要执行的命令。这些命令包括:

    iptables -A FORWARD -i wg0 -j ACCEPT;

    允许所有从 wg0 接口进入的流量进行转发。
    -A FORWARD:在 FORWARD 链中添加一条规则。
    -i wg0:匹配从 wg0 接口进入的流量。
    -j ACCEPT:接受并转发该流量。
    iptables -A FORWARD -o wg0 -j ACCEPT;

    允许所有从 wg0 接口出去的流量进行转发。
    -A FORWARD:在 FORWARD 链中添加一条规则。
    -o wg0:匹配从 wg0 接口出去的流量。
    -j ACCEPT:接受并转发该流量。
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;

    对所有通过 eth0 接口出去的流量进行地址伪装( NAT )。
    -t nat:在 nat 表中操作。
    -A POSTROUTING:在 POSTROUTING 链中添加一条规则。
    -o eth0:匹配通过 eth0 接口出去的流量。
    -j MASQUERADE:对流量进行地址伪装。
    iptables -I INPUT -i wg0 -j ACCEPT;

    允许所有从 wg0 接口进入的流量。
    -I INPUT:在 INPUT 链的顶部插入一条规则。

    -i wg0:匹配从 wg0 接口进入的流量。
    -j ACCEPT:接受该流量。
    ```
    1423
        21
    1423  
       3 天前   ❤️ 1
    搞不定的话可以远程协助
    taygetus
        22
    taygetus  
       3 天前   ❤️ 1
    docker run -d --restart unless-stopped \
    --name=wg-easy \
    -e WG_HOST=xxxx \
    -e PASSWORD=xxxx \
    -e WG_DEFAULT_DNS=223.5.5.5 \
    -e WG_PERSISTENT_KEEPALIVE=10 \
    -e WG_ALLOWED_IPS=192.168.124.0/24,10.8.0.0/24 \
    -e WG_MTU=1420 \
    -v /DATA/appdata/wg-easy:/etc/wireguard \
    -p 51820:51820/udp \
    -p 51821:51821/tcp \
    --cap-add=NET_ADMIN \
    --cap-add=SYS_MODULE \
    --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
    --sysctl="net.ipv4.ip_forward=1" \
    -e TZ=Asia/Shanghai \
    weejewel/wg-easy

    [Interface]
    PrivateKey = xx
    Address = 10.8.0.9/24
    DNS = 223.5.5.5
    MTU = 1420

    [Peer]
    PublicKey = x
    PresharedKey = x
    AllowedIPs = 192.168.124.0/24, 10.8.0.0/2
    PersistentKeepalive = 10
    Endpoint = xxx


    我这个配置可以随便访问 124 网段
    taotaolin
        23
    taotaolin  
       3 天前   ❤️ 1
    我也遇到过这个问题,貌似是 docker 的什么转发没开。我没折腾出来,最后没用 docker 起 wg 服务,直接用宿主机就可以了。使用 wg-easy 的 docker 环境没搞出来,等个大佬帮看看
    eunrui
        24
    eunrui  
    OP
       3 天前
    @taygetus 我的和你的除了 DNS 不一样,没加 MTU ,其他的没区别
    eunrui
        25
    eunrui  
    OP
       3 天前
    @shiyuu 感谢,转发的 server 和内网服务器都开启了,但是 server 那边的配置貌似 AllowedIPs 没办法改,进入容器看了 wg0.conf 的注释,说不要直接在里面改,会被覆盖。server 的 Peer 都是 wg-easy 自动写入的。我先消化一下。
    taygetus
        26
    taygetus  
       3 天前   ❤️ 1
    @eunrui #24 我的 124 就是 wg-easy server 的机器网段 跟你的情况不一样 我是直接用 natter 打 udp 洞直连的 没中间云服务器
    V2fishWE
        27
    V2fishWE  
       3 天前   ❤️ 1
    提供个思路,最简单的方法使用 tailscale ,将想要做转发的机器设置成 exit - node
    ovoo
        28
    ovoo  
       3 天前   ❤️ 1
    @eunrui 我的思路是一定要修改这个自动生成的配置文件,也就是
    ```
    # Client: server (9d0012cd-0248-4ee8-b845-c3cbf07172d7)
    [Peer]
    PublicKey = UqJD/AaTXBLi1kAMZn99TT4eapO8hdtAmyUeK9TdkhY=
    PresharedKey = r2WVnILyhEsZNhRhDN5dcfP84xLrQ6/Z9ohGSq0rNLs=
    AllowedIPs = 10.0.8.3/32, 192.168.11.0/24 # 修改这里,这样 wireguard 会自动在系统里添加一条路由,192.168.11.0/24 的路由都走这个 Peer 传输过去。
    ```
    同时需要 打开 IP 转发 以及 MASQUERADE 。
    ovoo
        29
    ovoo  
       3 天前   ❤️ 1
    @eunrui https://www.procustodibus.com/blog/2022/06/multi-hop-wireguard/

    看看这篇文章,和你的场景完美契合 :)
    ovoo
        30
    ovoo  
       3 天前   ❤️ 1
    实在不能修改文件,云服务器上手动执行添加路由的命令也是一样的效果。
    ```
    ip route add 192.168.11.0/24 via 10.0.8.3
    ```
    eunrui
        31
    eunrui  
    OP
       3 天前
    @ovoo 最新战况,要在 docker 里把内网服务器的 AllowedIPs 里加上 192.168.11.0/24 ,https://github.com/wg-easy/wg-easy/issues/921 这个 issues 里有说,我自己进容器手动加上了,虽然新加设备或重启的时候会被重置。


    现在我可以连通内网服务器 192.168.11.222 了,但是没办法访问其他内网设备的资源,比如说 192.168.11.215 上的 9098 的 web 服务,但是又能 ping 通 215 的 ip ,ssh 也连不上,
    ovoo
        32
    ovoo  
       3 天前   ❤️ 1
    @eunrui
    内外服务器 配置文件 添加:

    ```

    PreUp = iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

    PreUp = sysctl -w net.ipv4.ip_forward=1

    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


    ```

    注意替换 eth0 为实际的 物理网卡名

    再不行就在 云服务器也添加:
    ```
    PreUp = iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    ```
    eunrui
        33
    eunrui  
    OP
       3 天前
    @ovoo 感谢,重启了下,莫名其妙就可以了,
    eunrui
        34
    eunrui  
    OP
       3 天前
    结贴,配置追加到正文了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2407 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:24 · PVG 23:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.