搭建 Wireguard 服务并实现异地组网

CentOS7 需要安装内核模块补丁

CentOS7 安装 Wireguard 前需要安装 wireGuard 模块,官方给出来了3种安装方式,任选一种即可:

系统:centos 7.x
内核要求:> 3.10 (uname -r)

### Method 1: a signed module is available as built-in to CentOS's kernel-plus:
$ sudo yum install yum-utils epel-release
$ sudo yum-config-manager --setopt=centosplus.includepkgs=kernel-plus --enablerepo=centosplus --save
$ sudo sed -e 's/^DEFAULTKERNEL=kernel$/DEFAULTKERNEL=kernel-plus/' -i /etc/sysconfig/kernel
$ sudo yum install kernel-plus wireguard-tools
$ sudo reboot
### Method 2: users wishing to stick with the standard kernel may use ELRepo's pre-built module:
$ sudo yum install epel-release elrepo-release
$ sudo yum install yum-plugin-elrepo
$ sudo yum install kmod-wireguard wireguard-tools
### Method 3: users running non-standard kernels may wish to use the DKMS package instead:
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo curl -o /etc/yum.repos.d/jdoss-wireguard-epel-7.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo
$ sudo yum install wireguard-dkms wireguard-tools

安装完成后重启服务器。

利用 docker 安装 WireGuard-easy

version: '3.5'
services:
  wireguard:
    image: weejewel/wg-easy
    restart: unless-stopped
    ports:
      - 51820:51820/udp
      - 51821:51821/tcp
    environment:
      - WG_HOST=wg.host.com
      - PASSWORD=password
      # - WG_PORT=51820
      # - WG_DEFAULT_ADDRESS=10.8.0.x
      - WG_DEFAULT_DNS=114.114.114.114
      # - WG_MTU=1420
      - WG_ALLOWED_IPS=10.8.0.0/24
      - WG_PERSISTENT_KEEPALIVE=30
      # - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
      # - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
      # - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
      # - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
    volumes:
      - ./data:/etc/wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1

# 参考:https://raw.githubusercontent.com/WeeJeWel/wg-easy/master/docker-compose.yml

将以上内容保存为 docker-compose.yml 文件,并执行 docker-compose up -d 启动服务。在浏览器中输入服务器地址(内网端口 51821 )登录管理界面。

注意:

  • 通常服务位于路由或防火墙后面,WG_PORT 是外网访问端口(与 ports 可能不同,视路由映射而定),WG_HOST 是外网访问地址(可以是域名/IP,也可以是DDNS,但注意不会自动更新解析)。
  • WG_ALLOWED_IPS 如果设为 0.0.0.0 ,那客户端的所有流量都会走 VPN,所以应该仅设置需要代理的 IP 域。

异地组网

ubuntu 安装wireguard

sudo apt-get install -y openresolv wireguard

从 wireguard-easy 中添加一个 client ,并下载配置,将内容添加到组网电脑的此文件中: /etc/wireguard/wg0.conf

启动网卡:sudo wg-quick up wg0

查看状态:sudo wg show wg0ip a show wg0

自动启动:sudo systemctl enable wg-quick@wg0

激活和保活

  • wg0 创建后不会主动连接,意味着服务器不知道有主机上线,需要向服务器发送数据请求才行。可行的方法是,编辑 /etc/wireguard/wg0.conf ,在 [Interface] 中添加以下行:PostUp = ping -c 1 10.8.0.1 。此参数不能自动生成,需要手动添加。
  • 超过10分钟没有数据交互,连接会被断开,同样编辑 /etc/wireguard/wg0.conf,在 [Perer] 中添加以下行: PersistentKeepalive = 30 。在部署 wirewuard 服务器时添加 WG_PERSISTENT_KEEPALIVE=30 参数,可以在下载的配置中直接附带此参数。

windows 禁用缩略图缓存 Thumbs.db

  1. 开始 – 运行 – gpedit.msc
  2. 左侧依次展开:用户配置—管理模板—Windows组件—Windows资源管理器
  3. 找到 关闭隐藏的 thumbs.db 文件中的缩略图缓存 并启用

安装和使用 fail2ban

centos7 安装

yum install -y fail2ban
cp /etc/fail2ban/jail.{conf,local}
cat << EOF > /tmp/sshd.local
[sshd]
enabled = true
findtime = 1h
maxretry = 5
bantime = 1y
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/24
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
EOF
cp /tmp/sshd.local /etc/fail2ban/jail.d/sshd.local
systemctl enable --now fail2ban
systemctl restart fail2ban

可接受的缩写标记:

years?, yea?, yy?
months?, mon?
weeks?, wee?, ww?
days?, da, dd?
hours?, hou?, hh?
minutes?, min?, mm?
seconds?, sec?, ss?
  • ? 代表可选标记,因此要以天为单位设置时间,例如 days / day / da / dd / d
  • 可以组合多个标记,格式为空格分隔,不带分隔符,例如:1y6mo 或 1d12h30m
  • 标记 m 和 mm 表示分钟,月份使用缩写 mo 或 mon

Fail2ban客户端

Fail2ban附带了一个名为 fail2ban-client 的命令行工具,可用于与Fail2ban服务进行交互。

要查看所有可用选项,请使用-h选项调用命令:

fail2ban-client -h

此工具可用于禁止/取消禁止IP地址,更改设置,重新启动服务等等。 以下是一些示例:

检查Jails状况:

sudo fail2ban-client status sshd

取消IP权限:

sudo fail2ban-client set sshd unbanip 23.34.45.56

禁止IP:

sudo fail2ban-client set sshd banip 23.34.45.56

参考:https://denisrasulev.medium.com/server-protection-with-fail2ban-bfbe38a775b0

ubuntu 22.04 使用 netplan 设置网桥

  • 添加/编辑 /etc/netpaln/br0.yaml
  • 动态IP
network:
  version: 2
  ethernets:
    eno1:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [eno1]
      dhcp4: true
      parameters:
        stp: false
      dhcp6: false
  • 静态IP
network:
  version: 2
  ethernets:
    eno1:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [eno1]
      dhcp4: false
      addresses: [192.168.0.13/24]
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
        addresses: [114.114.114.114]
      parameters:
        stp: false
      dhcp6: false
  • 启用配置
sudo netplan apply

更多配置:https://netplan.io/examples#integration-with-a-windows-dhcp-server

pm2 在 windows 下运行 jar 包

  • 安装 nodejs 环境,过程略。
  • 安装 java 环境,过程略。
  • 安装 pm2 并设置开机自启环境
npm i -g --registry=http://registry.npm.taobao.org npm tbify
tnpm i -g pm2
tnpm i -g pm2-windows-startup
pm2-startup install
  • 准备好 jar 包,例如放在 c:\app\my.jar
  • 准备一个 json 文件 c:\app\pm2.json
{
    "apps": {
        "name": "myapp",  //pm2管理列表中显示的程序名称
        "cwd": "C:/app",  //项目所在目录
        "script": "javaw",  //要执行的脚本,javaw 后台运行
        "exec_mode": "fork", //fork单例多进程模式,cluster多实例多进程模式只支持node
        "error_file": "./log/err.log",  //错误日志存放位置
        "out_file": "./log/out.log",  //全部日志存放位置
        "merge_logs": true,  //追加日志
        "log_date_format": "YYYY/MM/DD HH:mm:ss",  //日志文件输出的日期格式,可以为空
        "min_uptime": "60s",  //最小运行时间(范围内应用终止会触发异常退出而重启)
        "max_restarts": 30,  //异常退出重启的次数
        "autorestart": true,  //发生异常情况自动重启
        "restart_delay": "60",  //异常重启的延时重启时间
        "args": [
            "-jar",
            "./my.jar"
        ]
    }
}
  • 运行并设置自启
pm2 start c:\app\pm2.json
pm2 save
  • pm2 面板
pm2 dash
  • 删除项目
pm2 ls // 找出项目 ID
pm2 del <id>
pm2 save

linux 命令行使用 wifi

命令都可简写,例如:nmcli device status 可以简写成 nmcli d s

网卡状态

$ nmcli device status
DEVICE             TYPE      STATE         CONNECTION 
enp0s3             ethernet  connected     enp0s3     
wlp0s11u1          wifi      disconnected  --         
p2p-dev-wlp0s11u1  wifi-p2p  disconnected  --         
lo                 loopback  unmanaged     --

无线列表

$ nmcli -p device wifi list [ifname wlan0]
==============================
  Wi-Fi scan list (wlp0s11u1)
==============================
IN-USE  SSID                        MODE   CHAN  RATE        SIGNAL  BARS  SECURITY  
--------------------------------------------------------------------------------------------------------------
        ChinaNet-vh4h               Infra  6     130 Mbit/s  84      ▂▄▆█  WPA1 WPA2 
        ChinaNet-hxeh               Infra  8     130 Mbit/s  84      ▂▄▆█  WPA1      
        kefu                        Infra  1     135 Mbit/s  74      ▂▄▆_  WPA1 WPA2 
        TP-LINK_chen                Infra  6     405 Mbit/s  74      ▂▄▆_  WPA1 WPA2

连接网络

$ sudo nmcli -w 10 device wifi connect <SSID>  password <PASSWORD>

断开网络

$ sudo nmcli device disconnect

升级 CentOS7 内核

载入ELRepo仓库的公共密钥

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

安装ELRepo仓库的yum源

rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

载入elrepo-kernel元数据

yum --disablerepo="*" --enablerepo="elrepo-kernel" repolist

查看可用的系统内核包,长期维护版本为lt,最新主线稳定版为ml

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

安装最新的内核,长期维护版本kernel-lt 最新稳定版选择kernel-ml

yum  --enablerepo=elrepo-kernel  install  -y  kernel-lt

查看可用内核版本及启动顺序

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg

安装辅助工具

yum install -y grub2-pc

设置内核默认启动顺序

grub2-set-default 0

编辑/etc/default/grub文件

设置 GRUB_DEFAULT=saved 为 GRUB_DEFAULT=0

生成 grub 配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

删除旧版本工具包–可选

yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64

升级内核工具包

yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64

ssh 转发 X11

  • CentOS7
    • 服务器配置 /etc/ssh/sshd_config
    AllowTcpForwarding yes X11Forwarding yes
    • 服务器安装 xorg-x11-xauth
    yum install -y xorg-x11-xauth
  • 本地修改文件 /etc/ssh/ssh_config
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
  • 登录
ssh -X root@ip