OpenWrt 命令行设置 WireGuard 配置

昨天在微信上发了一个视频教程,都是基于浏览器配置的。 原先的私钥已经泄露,所以,今天要修改一下演示里面的私钥。 我们直接在命令行里修改即可。

# 生成 key
# umask 077; wg genkey|tee privatekey|wg pubkey >publickey
# uci set network.wg0.private_key=$(cat privatekey)
# uci commit network
# /etc/init.d/network restart

# 如果是纯粹修改私钥,在 OpenWrt 端就做以上修改即可,如果需要修改其他 network 参数:
network.@wireguard_wg0[0]=wireguard_wg0
network.@wireguard_wg0[0].public_key='xxxx'
network.@wireguard_wg0[0].allowed_ips='0.0.0.0/0'
network.@wireguard_wg0[0].endpoint_host='endpoint.mydomain.com'
network.@wireguard_wg0[0].endpoint_port='51820'
network.@wireguard_wg0[0].persistent_keepalive='25'
network.@wireguard_wg0[0].route_allowed_ips='1'
network.wg0=interface
network.wg0.proto='wireguard'
network.wg0.private_key='private-key'
network.wg0.addresses='10.1.1.111/24'
#

WireGuard Ubuntu 上安装

$ sudo add-apt-repository ppa:wireguard/wireguard (Ubuntu 1910 之后不需要运行)
$ sudo apt install wireguard
$ sudo modprobe wireguard
$ sudo wg show

# 创建 Key Pair 
$ sudo -s
# cd /etc/wireguard; umask 077; wg genkey | tee privatekey | wg pubkey > publickey

服务器端,创建 /etc/wireguard/wg0.conf

[Interface]
PrivateKey = 私钥文本内容
# 服务器端 VPN VLAN 的 IP 地址,带掩码
# 确保 iptable 里面的 eth0 和自己使用的 网卡界面名一致
Address = 10.0.0.1/24, fd86:ea04:1115::1/64
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true

用 ufw 管理防火墙 ,并打开包转发

$ sudo ufw allow 22/tcp
$ sudo ufw allow 51820/udp
$ sudo ufw enable
$ sudo ufw status verbose
$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0
$ sudo wg show
$ cat << EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF
$ sysctl -p

以上为服务器配置完成,下面为客户端(可以是 Windows/Mac/iOS/Android等)创建配置文件:

先安装 qrencode 软件包, apt -y install qrencode,生成 png 文件发送给客户端扫码即可配置。

Todo: 部署客户端脚本

把 CentOS7 上的 docker 1.12 升级到 docker-ce 18.03

升级的过程比较简单明了, docker-ce 的官方文档有比较详细的介绍。 现在把我自己的升级过程介绍一下,并把遇到的问题以及解决办法,也分享一下。

1. 停止原来的所有运行的 docker, #docker stop xxx
2. 删除原来的 docker 软件包,

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

3. 添加新的 Repo:

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

可选

yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test

4. 安装新的 docker-ce,并启动:

 yum install docker-ce
 systemctl start docker

以上就是一个完整的更新过程。

然而, 在升级以后,发现原来的容器不见了。 解决的办法是: 去 /var/lib/docker/containers/dockxxxxHASHxxxx
修改  hostconfig.json 把其中的 “Runtime”:”docker-runc”
修改成: “Runtime”:”runc”
重启 docker 服务。

其实我们也会在 syslog 里找到这样的报错信息:
dockerd: time=”2018-03-03T11:37:24.024568022+08:00″ level=error msg=”Failed to start container dockxxxxHASHxxxx: no such runtime ‘docker-runc'”

这样,我们就可以找回原来的 docker 了。
# docker container ls -a

另外一种部署 Certbot 的办法

如果还没有安装过  pip , 就用 yum install python-pip 安装,然后就升级 pip:
# pip install –upgrade pip

  1. 查看官方版本 # pip search certbot ;
  2. 卸载yum安装的certbot和pyOpenSSL: # yum remove certbot pyOpenSSL;
  3. pip安装certbot: # pip install certbot certbot-nginx certbot-apache
    1. 如果遇到 Python.h或者pyconfig.h找不到的错误,# yum install -y python-devel;
    2. 如果找不到opensslv.h头文件,#  yum install -y openssl-devel;
  4. 查看所有已经安装的证书: # certbot certificates。

添加或者 renew 单独证书:

# certbot --apache -d mydomain.yj777.cn certonly

Renew 所有证书,可以把下面的行写到 cronjob。

15 3 1,15 * * /usr/bin/certbot renew –quiet

== 2018/1/20 后记:

如果运行 certbot certificates 看到错误:certbot ImportError: No module named OpenSSL
可以考虑,重新安装 pyOpenSSL 模块。

也就是先 pip uninstall certbot pyOpenSSL

再  pip install cerbot 即可, pyOpenSSL 会自动安装。

== 2018/2/5 后记:
遇到 " OSError: ctypes.util.find_library() did not manage to locate a library called 'augeas'" 错误:
yum install augeas-libs

遇到:“ImportError: No module named ndg.httpsclient.ssl_peer_verification” 错误:
pip install ndg-httpsclient

遇到:“UnknownExtra: requests 2.6.0 has no such extra feature ‘security’” 错误:
# pip install acme –upgrade

以上基本上能解决大部分的 certbot(Let’s Encrypt) 安装和升级中发现的问题,如果还有问题,就点击联系我们,留言吧。我们会提供有偿的支持服务。

如果是在 CentOS6 上部署的话, 需要先升级 Python:

yum install -y epel-release
yum install -y python34
# 因为yum安装时没能同时安装pip与setuptools,所以我们要手动安装,这里采用拿第三方包解决问题
# curl -O https://bootstrap.pypa.io/get-pip.py
# sudo python3 get-pip.py
然后就可以运行 pip 命令了。
— 补充:
原先 Apache 认证器的,如果 Web 服务器切换成 Nginx 了, 可以直接用
# /usr/local/bin/certbot renew –nginx -d domain_name –no-redirect
更新证书

crontab 的写法,每周三,凌晨 4:00 更新:
00 4 * * 3 /usr/local/bin/certbot renew –quiet –noninteractive –installer nginx –pre-hook “service nginx stop” –post-hook “service nginx start”