美文网首页
Wireguard的一些学习和理解

Wireguard的一些学习和理解

作者: 夜清溟 | 来源:发表于2023-05-10 17:25 被阅读0次

    1、wireguard属于内核级别的工具,需要内核支持wireguard

    sudo modprobe wireguard
    

    如果内核支持 WireGuard,这个命令不会返回任何错误信息,而如果内核不支持 WireGuard,它会返回 "modprobe: FATAL: Module wireguard not found in directory /lib/modules/$(uname -r)" 或类似的错误信息。

    如果内核不支持 WireGuard,需要编译并安装支持 WireGuard 的内核模块或者升级到支持 WireGuard 的较新的内核版本。同时,您也需要安装 wireguard-tools 工具包来配置和管理 WireGuard VPN。
    2、centos7默认为3.10版本的内核,需要升级到Linux 5.6(包括)以上。
    升级: https://www.jianshu.com/p/be51bf872256?v=1683794134635

    centos7安装配置wireguard服务端

    1、安装wireguard工具

    yum -y install wireguard-tools
    

    2、打开ip转发
    在服务端上开启 IP 地址转发:

    $ echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    $ echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
    $ sysctl -p /etc/sysctl.conf
    

    3、服务端配置
    个人理解:wireguard可以说不区分服务端和客户端的说法,谁主动连接谁就是客户端。peer即一个端。端与端通过互相持有对方公钥来加密和认证。
    服务端默认配置文件为/etc/wireguard/wg0.conf
    生成私钥:

    $ umask 077
    $ wg genkey > privatekey
    

    生成公钥

    wg pubkey < privatekey > publickey
    

    一条命令生成私钥和公钥

     wg genkey | tee privatekey | wg pubkey > publickey
    

    编辑服务端配置文件:vim /etc/wireguard/wg0.conf

    [Interface]
    Address = 10.0.10.1/24
    ListenPort = 51820
    PrivateKey = 填写刚才生成的服务端私钥
    
    PreUp = echo WireGuard PreUp  
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o em1 -j MASQUERADE; sysctl -w net.ipv4.ip_forward=1
    PreDown = echo WireGuard PreDown
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o em1 -j MASQUERADE; sysctl -w net.ipv4.ip_forward=0
    
    [Peer]
    PublicKey = 填写客户端的公钥
    AllowedIPs = 10.0.10.3/32   #客户端IP
    

    Peer段可先注释掉或者不填写,等客户端生成公钥在填写。

    解释:
    Name: 可以使用wg0之类的名称, 这个会被用于网口名称, 所以不要太长太复杂
    [Interface]
    Address: 开启wg之后本机的隧道IP,可以是任意内网IP地址,不要与现有局域网IP冲突,可以是10.0.0.1/24 或者172.17.0.1/24等
    ListenPort: wireguard监听端口
    PrivateKey: 服务端的私钥
    
    PostUp:在 WireGuard 接口启动后执行的命令,用于设置 IP 转发和 NAT。
    在这里,该参数设置了三个命令:
    iptables -A FORWARD -i wg0 -j ACCEPT:允许来自 WireGuard 接口的数据包转发;
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE:将来自 WireGuard 接口的数据包源地址改为服务器端的 eth0 网卡的 IP 地址,并进行 NAT 处理;
    sysctl -w net.ipv4.ip_forward=1:启用 IP 转发功能,使服务器能够转发从 WireGuard 客户端发送到服务器所在局域网内其他设备的数据包。
    
    PostDown:在 WireGuard 接口停止后执行的命令,用于清理 IP 转发和 NAT。在这里,该参数设置了三个命令:
    iptables -D FORWARD -i wg0 -j ACCEPT:禁止来自 WireGuard 接口的数据包转发;
    iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE:删除 NAT 规则;
    sysctl -w net.ipv4.ip_forward=0:禁用 IP 转发功能。
    
    [Peer]
    PublicKey : 客户端的公钥
    AllowedIPs : 需要走隧道的IP段, 一般包含隧道自身IP段, 以及要借道隧道的IP段, 但是这里设置并不会产生对应的route
    Endpoint: 服务端的IP和端口
    PersistentKeepalive: 25 保持活动的时间间隔
    
    

    配置文件编辑保存好之后就可以打开启动wireguard了

    刚才已经安装过了wireguard工具包含wireguard-tools

    启动wireguard服务端
    wg-quick up wg0
    

    也可以通过systemd服务器启动

    systemctl start wg-quick@wg0
    

    如果你配置了多个wireguard,另一个网口为wg1,那么你可以通过
    systemctl start wg-quick@wg1来启动它。

    可以通过wg show 查看状态,如:

    $ wg show
    interface: wg0
      public key: *********************
      private key: (hidden)
      listening port: 51820
    
    peer: **************************
     
    

    客户端配置

    可以从官网获取配客户端安装:https://www.wireguard.com/install/
    win打开客户端,左下角点击新建一个空的隧道,默认会生成一堆公私钥。
    将以下配置到客户端的配置里:

    [Interface]
    PrivateKey = 客户端自动生成的私钥
    Address = 10.0.10.2/32    #客户端地址,可以是服务端address定义的地址段的任意ip。
    DNS = 10.0.10.1  #客户端使用的dns服务地址
    
    [Peer]
    PublicKey = 填写服务端的公钥
    AllowedIPs = 10.0.0.0/16, 192.168.0.0/16, 172.17.0.0/16 # 要走隧道的网段或者IP
    Endpoint = ********.com:51820   #服务端的公网IP和端口
    PersistentKeepalive = 16   3保持活动的时间间隔
    
    

    保存之后点击连接即可。
    需要注意:每次新增加peer端之后。需要重启wireguard服务端

    systemctl restart wg-quick@wg0
    

    wireguard图形化管理工具

    地址:https://github.com/vx3r/wg-gen-web

    docker-compose安装:

    version: '3.6'
    services:
      wg-gen-web:
        image: vx3r/wg-gen-web:latest
        container_name: wg-gen-web
        restart: unless-stopped
        expose:
          - "8080/tcp"
        ports:
          - 8080:8080
        environment:
          - WG_CONF_DIR=/data
          - WG_INTERFACE_NAME=wg0.conf
          - SMTP_HOST=smtp.exmail.qq.com
          - SMTP_PORT=465
          - SMTP_USERNAME=tom@gmail.com
          - SMTP_PASSWORD=*************
          - SMTP_FROM=tom@gmail.com
          - OAUTH2_PROVIDER_NAME=fake
          - WG_STATS_API=http://172.17.0.1:8182
          #- OAUTH2_PROVIDER=https://github.com
          #- OAUTH2_CLIENT_ID=******************
          #- OAUTH2_CLIENT_SECRET=******************
          #- OAUTH2_REDIRECT_URL=https://wg-gen-web-demo.127-0-0-1.fr
        volumes:
          - /etc/wireguard:/data
      wg-json-api:
        image: james/wg-api:latest
        container_name: wg-json-api
        restart: unless-stopped
        cap_add:
          - NET_ADMIN
        network_mode: "host"
        command: wg-api --device wg0 --listen 172.17.0.1:8182
    
    

    启动:

    docker-compose up -d 
    

    浏览器访问 http://****:8080

    设置服务端相关配置,然后即可生成客户端配置文件,可通过邮件发送生成的配置文件。

    客户端导入生成的配置文件即可。

    相关文章

      网友评论

          本文标题:Wireguard的一些学习和理解

          本文链接:https://www.haomeiwen.com/subject/reljsdtx.html