Day_23 WireGuard

延伸昨天OpenVPN,介绍另一个VPN点对点的连接技术"WireGuard"。在这四千多行的程序中完成了更安全的加密与更简易的配置,相较其他VPN方式又提升连接效能。
WireGuard在Linux 5.6版本并入核心,目前openwrt 21.02使用Linux kernel 5.4。不过都是基於linux的专案,因此使用与安装没有问题。且WireGuard已经可以在多个系统中运作,让实务应用与配置度更灵活。

WireGuard是由Jason A. Donenfeld开发的开放原始码VPN程序及协定[1],基於Linux核心实现,利用Curve25519进行金钥交换,ChaCha20用於加密,Poly1305用於资料认证,BLAKE2用於杂凑函式运算[1],支援IPv4和IPv6的第3层。[2]WireGuard旨在获得比IPsec和OpenVPN更好的效能[3]。

  • 安装相关套件包
    opkg update
    opkg luci-proto-wireguard luci-app-wireguard luci-i18n-wireguard-zh-tw
    
  • 建立一个新资料夹,之後比较好分类
    mkdir /etc/wireguard
    cd /etc/wireguard
    
  • 修改资料权限(可省略)
    umask 077
  • 建立server的公/私钥,可以看到生出两个文件
    wg genkey |  tee wg.key | wg pubkey > wg.pub
    
名称 说明
wg.key server 私钥
wg.pub server 公钥
  • 用cat指令复制与记下金钥

    cat wg.key
    cat wg.pub
    
  • 回到luci介面设定(也可以使用命令介面)

    • 需要重启网路介面,WireGuard的设定才会出现。
    • 也可以用指令/etc/init.d/network reload
  • 建立新介面

    • 填名字
    • 选协定"WireGuard"
    • 输入server私钥(wg.key)
    • 选择port(1024-65535不要跟其他port重复)
    • 输入新网域(不要与现有网域重复)
    • 高级设置预设值
    • 防火墙选VPN或直接选择LAN

  • 防火墙规则

    • 目的是让连进来的设备能连上其他设备
    • 192.168.20.1/24 为刚设定的网域
    • -o 後面看实际lan的介面。我这边要选实体网卡"eth0",如果是桥接就是"br-lan"
    iptables -t nat -A POSTROUTING -s 192.168.20.1/24 -o eth0 -j MASQUERADE
    

  • 开启防火墙port

    • openwrt为主路由时,可直接在防火墙设置。
      • 设定开启刚刚选择监听的UDP port 号
    • 如果是次级路由等,需要先做port口的转发
      • 把WAN UDP port 转发到内网openwrt的port上
  • 建立客户端金钥

    • 一样建立资料夹好区分
    mkdir 01
    cd 01
    
  • 建立共享金钥,减少交握过程

    wg genpsk > wgclient.psk
    cat wgclient.psk
    
  • 建立client端金钥

    wg genkey | tee wgclient.key | wg pubkey > wgclient.pub
    
名称 说明
wgclient.key client 私钥
wgclient.pub client 公钥
```
cat wgclient.key
cat wgclient.pub
```
![](https://i.imgur.com/iUUfxT2.png)
  • 回到luci介面中设定
    • 新增Peers。并填入client公钥、IP、允许的IP群、共享金钥,最後保存启用与重新启动。如果多个用户就重复步骤建立多个用户

  • client 的设定档制作
    • 填入以下资讯,并储存成*.conf档案。这档案就要小心使用,避免公开传输。
[Interface]
Address = 192.168.20.2
PrivateKey = wgclient.key值
DNS = 路由器IP
[Peer]
PublicKey = wg.pub值  
AllowedIPs = 0.0.0.0 /0
PresharedKey = wgclient.psk值
如果启用下面这行,表示只有192.168.2.0/24, 192.168.100.0/24这两个IP走WireGuard
AllowedIPs = 192.168.2.0/24, 192.168.100.0/24
Endpoint = 实体IP:port(hotsname:port)
PersistentKeepalive = 25 

client端

  • 先到WireGuard下载对应作业系统的软件

  • 汇入档案并测试连线

    • win 使用tracert openwrt.org
    • linux 使用traceroute openwrt.org

Troubleshooting

目前也还在翻车中,有看到已连线,但资讯封包流向可能不正确或是防火墙设定错误,所以一直在断线之中。

Ref


<<:  【第20天】训练模型-模型组合与辨识isnull(一)

>>:  Day20-94. Binary Tree Inorder Traversal

IT铁人第27天 Elasticsearch 使用python查询资料 Aggregations:Percentiles/Percentile Ranks

今天的文章要讲的是Percentiles(百分位数)跟Percentile Ranks(百分位数排名...

TailwindCSS 从零开始 - 新增自己的 Utility

除了可以新增元件外,也可以增加自订义的功能。 虽然 TailwindCSS 已经提供非常多好用的 ...

Kubernetes 超入门

Kubernetes 超入门 Kubernetes 是一种让使用者管理Cluster 的一种工具,能...

{DAY 2} 如何处理一笔数据?(上)

大家一定都听过数据分析 让我们先来看一笔实际的数据 点开kaggle上随意一笔csv档 (资料来源:...

2.4.10 Design System - Input Text

以前我绝对是对哲学避之唯恐不及的 但某一年意外看到「正义 一场思辨之旅」以及「超译 尼采」後 开始...