记录时间:2020 年 2 月 8 日

关键词:OpenWrt wireguard 配置 ipv6

记录用途

路由器作为服务端,利用ipv6方便地连接到家庭内网,传输文件,局域网游戏等等

记录环境

K2路由器(PSG1218) OpenWrt 19.07.1 固件 ,家庭宽带 ipv6

安装的openwrt 软件包:wireguard luci-app-wireguard 以及汉化包 luci-i18n-wireguard-zh-cn luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn

luci管理界面直接配置

  1. 添加接口

依次找到网络->接口->添加新接口,设置内容如下

1
2
名称:wg
协议:WireGuard VPN

然后创建接口。

  1. 接口>>wg 基本设置

分别填写举例如下

1
2
3
私钥:Yczs1a2s5dRib6UUEl2a14Wd0OuZ8gVy/Cz6UgjiQI= (必须由程序生成)
监听端口:23333 (可以在1~65535范围内选择,尽量大一些,另外注意避免与常用端口冲突)
IP地址: 192.168.10.1 (填写一个私人的子网ipv4地址,不能与已有的网段冲突)

关于公钥私钥的获得:可以在Android或者windows等客户端上,选择手动添加配置,就会自动生成一组,然后直接复制private key填写在这里即可。另外public key也要保存一下,客户端的配置需要用到。

也可以ssh到openwrt,然后执行

1
wg genkey | tee privatekey | wg pubkey > publickey

在privatekey文件中得到私钥,在publickey文件得到公钥。

  1. 接口>>wg 防火墙设置

创建/分配防火墙区域:选择lan

  1. 接口>>wg Peers

点击添加对等点,填写配置举例如下:

1
2
3
4
5
描述(可选):android111  (自定一个客户端的英文名称)
公钥:WKpXJN/qy1d6541WxUQuhMPxfE6vQ6r5+LvO1xFZT38= (填写客户端的公钥,而不是服务端的)
允许的 IP:192.168.10.2 (允许客户端在VPN网络中使用的ip地址)
路由允许的 IP:√ (这里一定要选中!不然无法访问内网设备)
持续 Keep-Alive(可选):25 (若对方客户端网络是在NAT后的环境,则需要开启,但ipv6基本不存在NAT所以不用开启)

然后保存并应用。若需要添加更多客户端,只需要重复这一步添加更多的Peers即可,最基本的只要填写对应的公钥允许的IP即可。

  1. 设置防火墙开放监听端口

依次找到网络->防火墙->通信规则->添加,打开的页面为防火墙 - 通信规则 - 未命名规则,在基本设置中只需修改如下几项,其他项默认即可

1
2
3
4
5
名称:Allow_Wireguard-Inbound   (名称任意,只要是便于识别的英文即可)
协议:UDP (wireguard只支持UDP协议)
源区域:任意区域(转发)
目标区域:设备(输入)
目标端口:23333 (这个目标端口必须与第2步设置的监听端口一致)

然后保存并应用。最后还需要重启一次wg接口或路由器才会生效。一旦连接成功可以在 状态->Wireguard状态 中看到相关的信息。

对客户端的配置

推荐参考这篇文章:

自己搭建WireGuard给Android用:https://mine260309.me/archives/1697

如果要配置windows端或其他平台,可以先在手机端配置好后,导出配置文件再发送过去直接导入配置就行了。因为感觉windows客户端目前用起来还是有点简陋啊,静待更新吧。

关于wireguard

其实wireguard本身的设计是既可以作为服务端也可以作为客户端的,所以说一个端点起什么作用只看你的接口(interface)和对等端(peers)设置是如何填写的了。

由于之前对于非对称加密没什么了解,在配置时就被自己坑了,弄错了公钥和私钥的使用对象。所以以配置过程为例,稍稍记录一下这个关系。

interface为本机的相关信息,peers为对方的相关信息。无论服务端还是客户端,在一个完整的配置中,peers的公钥只填写对方设备的公钥,而私钥则是本机(interface)自己的。一开始配置时没有搞清楚这个公私钥的关系,考虑了半天才明白就是这么简单。对于生成的一对公钥和私钥,私钥只给自己用,公钥则交给对方使用。

非ipv6的备选方案

如果没有ipv6或公网ip怎么办? 推荐使用ZeroTier,而且这个感觉使用和配置更简单一些。

关于记录

没有整到用起来流畅的图床,只能用文字记录了

参考

自己搭建WireGuard给Android用:https://mine260309.me/archives/1697

Setting up a WireGuard server on OpenWRT:https://blog.birkhoff.me/setting-up-a-wireguard-server-on-openwrt/

记 WireGuard 部署及注意事项:https://yooooex.com/2019/05/23/wireguard-deploy/

记录时间:2020 年 2 月 1 日

关键词:OpenWrt imagebuilder K2 package 固件打包

K2在openwrt官方支持的固件列表里为psg1218a,如果没有做任何硬改,直接使用官方的固件也很不错。另外相比从源码开始编译,使用imagebuilder来做简单的固件定制更方便快捷体积小(其实就是提前把软件包集成在固件中)。

此记录全程以K2路由器为例,其他路由器需要找到相对应的下载地址,请灵活变通。另外要注意涉及的下载、镜像地址和脚本可能在未来过时或失效。

使用imagebuilder打包

  1. 下载image builder

在清华镜像站下载image builder https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/

K2的19.07.1版本在https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/19.07.1/targets/ramips/mt7620/

文件名为openwrt-imagebuilder-19.07.1-ramips-mt7620.Linux-x86_64.tar.xz

直接使用文件管理器,解压这个压缩包到主目录,打开解压出的这个文件夹。

图片

  1. 在当前目录下右键打开终端,执行以下指令更换一下清华源
    1
    sed -i 's#downloads.openwrt.org#mirrors.tuna.tsinghua.edu.cn/openwrt#' repositories.conf
  2. 安装必要的软件
    1
    sudo apt-get install build-essential libncurses5-dev libncursesw5-dev zlib1g-dev gawk git gettext libssl-dev xsltproc wget unzip python
  3. 执行并找到目标配置的名称,k2为psg1218a,其实就是官方固件文件名中的设备名称
    1
    make info
  4. 开始打包,可以在PACKAGES后自行添加需要的软件包
    1
    make image PROFILE="psg1218a" PACKAGES="luci luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn"
    速度比较快,完成后,固件就在当前目录中的bin文件夹内
    如果不满意,需要再次打包时,先执行一下make clean,再进行make image。

另外还可以添加一些除官方源外的其他源或者下载好位于本地的package,具体可以参考官方的说明

利用GitHub Actions自动打包

方便快捷,就是下载回来有点难。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
name: OpenWrt image builder
on: 
  push:
    branches: 
      - master
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: 初始化
      env:
        DEBIAN_FRONTEND: noninteractive
        #可修改imagebuilder下载地址
        DOWNLOAD_URL: https://downloads.openwrt.org/releases/19.07.1/targets/ramips/mt7620/openwrt-imagebuilder-19.07.1-ramips-mt7620.Linux-x86_64.tar.xz
        
      run: |
        sudo apt-get install build-essential libncurses5-dev libncursesw5-dev zlib1g-dev gawk git gettext libssl-dev xsltproc wget unzip python
        wget -O /tmp/imagebuilder.tar.xz $DOWNLOAD_URL
        sudo xz -d /tmp/imagebuilder.tar.xz
        sudo tar -C /tmp -xvf /tmp/imagebuilder.tar
    - name: 打包固件
      run: |
        #在PROFILE中填写配置的设备名 在PACKAGES中添加需要的软件包
        cd /tmp/$(ls /tmp | grep 'openwrt-imagebuilder')
        sudo make image PROFILE="psg1218a" PACKAGES="luci luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn ssmtp wireguard luci-app-wireguard luci-i18n-wireguard-zh-cn"
        cp -r bin /tmp
    - name : 上传固件
      uses: actions/upload-artifact@master
      with:
        name: image
        path: /tmp/bin

参考

OpenWrt.org-Using the Image Builder: https://openwrt.org/docs/guide-user/additional-software/imagebuilder

imagebuilder快速编译OpenWrt固件使用教程+高级自定义+在线编译: https://www.right.com.cn/forum/thread-522029-1-1.html

Openwrt 国内源配置 · DarkGod’ Blog:https://www.dazhuanlan.com/2019/10/17/5da7cdea1f0c8/

记录时间:2020 年 1 月 31 日

关键词:openwrt 19.07 ssmtp 邮件通知 IP变化 IPv6 PSG1218 K2

更换软件镜像源

鉴于openwrt的官方软件源速度不太行,先换个清华的源。不过ssmtp体积很小,不换的话下载问题也不大。

图片

复制类似下面的地址到opkg/distfeeds.conf并保存。这里以k2路由器的mt7620为例,其他类型或版本可以去清华的镜像源查看,然后找到相对应的目录下复制url地址。

1
2
3
4
5
6
src/gz openwrt_core http://mirrors.tuna.tsinghua.edu.cn/lede/releases/19.07.0/targets/ramips/mt7620/packages
src/gz openwrt_base http://mirrors.tuna.tsinghua.edu.cn/lede/releases/19.07.0/packages/mipsel_24kc/base
src/gz openwrt_luci http://mirrors.tuna.tsinghua.edu.cn/lede/releases/19.07.0/packages/mipsel_24kc//luci
src/gz openwrt_packages http://mirrors.tuna.tsinghua.edu.cn/lede/releases/19.07.0/packages/mipsel_24kc//packages
src/gz openwrt_routing http://mirrors.tuna.tsinghua.edu.cn/lede/releases/19.07.0/packages/mipsel_24kc//routing
src/gz openwrt_telephony http://mirrors.tuna.tsinghua.edu.cn/lede/releases/19.07.0/packages/mipsel_24kc//telephony

图片

安装ssmtp

关于ssmtp,体积小是选择这个的首要因素,下面两种方式都可以安装。

  • luci管理界面安装

图片

  • shell命令方式安装
    1
    2
    opkg update
    opkg install ssmtp

    配置ssmtp

    ssh登录openwrt之后,修改并执行以下命令。这里的配置是以163邮箱举例的,如果使用其他的邮箱可能要稍作修改,一些SMTP服务器可能还需要指定具体的端口,详情可以参考ssmtp配置文件中的注释。

编辑配置文件可以

1
 vim /etc/ssmtp/ssmtp.conf

也可以用winscp登录,打开/etc/ssmtp/目录下的ssmtp.conf文件修改
下面是需要修改的内容举例

1
2
3
4
5
6
7
8
root=xxx@163.com  #替换成自己的邮箱帐户
mailhub=smtp.163.com:994 #邮箱的smtp服务器+相应协议的端口号,不填端口则默认25
rewriteDomain=163.com
hostname=163.com
FromLineOverride=YES
UseTLS=YES #启用TLS加密发送邮件
AuthUser=xxx@163.com #替换为自己的邮箱帐户
AuthPass=xxx #邮箱密码或者邮箱客户端授权码

关于端口号:网易163邮箱提供的SMTP服务器端口号

图片

创建获取IP并发送邮件的脚本

其实就是把之前用于Padavan的脚本稍作修改之后得到的。另外除了下载也可以直接复制脚本内容,手动新建一个脚本文件,或者保存修改后用winscp等等工具上传到openwrt等等,怎么方便怎么来。

建立脚本

1
2
touch /sbin/ipmail.sh
vim /sbin/ipmail.sh

复制以下内容到ipmail.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/sh -e
#设置发件人地址,与ssmtp配置一致
from=FROM
#设置收件人地址,多人用英文逗号隔开
towho=TOWHO
#有必要的话更改网络接口名(网卡)
interface=pppoe-wan
file=$HOME/.ipmail
[ -e $file ] && old=`cat $file`
#获取wan ip地址
ipaddress=$(ip -6 addr list scope global $interface | grep "global" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p')
#判断ip地址是否存在
if [ -z "$ipaddress" ]; then
  echo "no IPv6 address found"
  exit 1
fi
#检查地址是否改变
if [ "$old" = "$ipaddress" ]; then
  echo "IPv6 address unchanged"
  exit
fi
mailtxt=$HOME/.ipmailtext
#写好邮件
cat > $mailtxt <<EOF
From:${from}
To:${towho}
Subject:IP发生变更,打开查看详情

OpenWrt:检测到WAN IP发生变更!
新的IP为  ${ipaddress}
EOF
#发送邮件
ssmtp $towho < $mailtxt
#缓存当前ip地址到文件
echo $ipaddress > $file

添加发件人和收件人地址

务必修改脚本中的以下内容

1
2
3
4
#设置发件人地址 与ssmtp配置一致
from=xxxx@163.com
#设置收件人地址,多人用英文逗号隔开
towho=xxx@qq.com,xxxx@qq.com

添加可执行权限

1
chmod +x /sbin/ipmail.sh

添加到计划任务

可以直接在管理界面添加,意思是每10分钟执行一次,另外第一次添加计划任务可能会不起作用,可以在启动项中找到cron重启一下。

1
*/10 * * * * /sbin/ipmail.sh

图片

关于脚本

修改自上一篇,与参考中的《Openwrt发邮件通知Wan口Ip变化》相比,定时执行采用openwrt的计划任务,感觉可能会稍微灵活一些。另外本脚本会创建临时文件,而参考脚本不需要。其他的差别就不太清楚了,如果有人看到这篇并且知道差别请带带我!虽然只要达到目的就行。

END

其实对每10分钟检测一次这个操作来说,家庭宽带的IPv6地址变化并没有这么频繁,基本上只有重启路由器和IPv6地址租期到期两种情况才会导致IP变化,因此只需要添加到开机启动脚本和检测IPv6到期即可,但是检测地址到期这个还没有搜索到相关的内容,暂时先放放好了。不过运行这个脚本消耗不大,只有检查到ip变化才会发送邮件,所以基本没什么影响。

参考

OpenWrt - SMTP clients:https://openwrt.org/docs/guide-user/services/email/smtp.client?s[]=ssmtp

openwrt使用ssmtp发邮件:https://www.openwrtdl.com/wordpress/%E6%95%99%E7%A8%8Bopenwrt%E4%BD%BF%E7%94%A8ssmtp%E5%8F%91%E9%82%AE%E4%BB%B6

Openwrt发邮件通知Wan口Ip变化:https://www.jianshu.com/p/5effa0c0aab3