局域网组建(一) 远程办公实现 — WireGuard组建跨地域局域网(AlmaLinux+Docker)

  远程访问局域网设备通常采用内网穿透或VPN隧道。WireGuard是一种采用UDP协议的新型VPN技术。WireGuard提供的是节点与节点的网络连接形式,除了可以实现传统VPN以服务器为网关的星型拓扑结构,还可以节点与任意其他节点进行连接,实现节点间的全互联,解决了单一网关导致的网络瓶颈。

  AlmaLinux为CentOS停止维护后的继承者,是Red Hat的下游版本,拥有10年生命周期。本次实验采用AlmaLinux安装Docker来实现WireGuard的部署。

目录

一、AlmaLinux配置

1.配置阿里云镜像源

2.更新系统应用

3.配置密钥远程登录

二、安装Docker

1. 方法一:通过宝塔面板安装

2. 方法二:终端直接安装

三、安装WireGuard(Place1/wg-access-server项目)

1. 安装

2. 检查容器运行状态

3. 端口放通

4. 访问管理面板

四、客户端配置

1. 配置信息生成

2. 导入配置信息

3. 连接建立:

五、容器运行异常排查

1. 查看Docker容器运行日志:

2. 错误处理


  WireGuard跨区域组网需要至少一台机器具有公网IP或在局域网内组网。如果仅有一台机器具备公网IP(可为云服务器),想要组建跨地域局域网,只能采用单一网关的星型拓扑结构,本实验将演示该情况下的跨地域组网。

一、AlmaLinux配置

1.配置阿里云镜像源

  配置方法参考:almalinux镜像源配置 - 阿里巴巴开源镜像站

2.更新系统应用

  终端内执行以下命令: 

dnf upgrade -y
reboot

3.配置密钥远程登录

1)密钥文件产生

  法一:云服务提供商后台管理面板直接生成.pem的密钥文件。将.pem文件Load到puttygen.exe软件中。复制“Public key for pasting into OpenSSH authorized_keys file”文本框里的公钥。点击Save private key,保存.ppk的私钥文件用于后续登录。

  法二:打开puttygen.exe软件,密钥类型选择RSA,点击Generate按钮,产生过程中不停晃动鼠标直至产生完毕。复制“Public key for pasting into OpenSSH authorized_keys file”文本框里的公钥。点击Save private key,保存.ppk的私钥文件用于后续登录。

2)Putty密钥登录

  ① 配置登录信息

图1 设定服务器IP和端口
图2 指定登录账户
图3 指定私钥文件

  ② 点击Open按钮即可登录。

二、安装Docker

1. 方法一:通过宝塔面板安装

1)防火墙配置:宝塔面板从CentOS 7开始只支持firewalld防火墙。关闭iptables并开启firewalld。

systemctl stop iptables
systemctl disable iptables
systemctl start firewalld
systemctl enable firewalld

 2)面板安装:

  安装方法:宝塔面板下载和安装

  复制CentOS安装脚本进行安装即可。

  【注意】需在服务器安全组放通宝塔面板管理页面端口

3)Docker安装:登录面板后,前往 软件商店,安装 Docker管理器

  后续Docker的使用可以直接在宝塔面板内可视化管理,也可在终端中使用docker命令管理。

2. 方法二:终端直接安装

官方指导文档:Install Docker Engine on CentOS | Docker Documentation

1)启动防火墙

systemctl stop iptables
systemctl disable iptables
systemctl start firewalld
systemctl enable firewalld

2)安装docker

yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

3)启动docker

systemctl start docker
systemctl enable docker

4)docker管理常用命令

# 查看所有容器
docker ps -a
# 删除指定的容器(<dockerID>替换实际的容器ID)
docker rm <dockerID>
# 查看镜像
docker images
# 删除指定的镜像(<imageID>替换实际的镜像ID)
docker rmi <imageID>
# 查看前1000行日志(法1)
docker logs --tail=1000 <dockerID>
# 查看前1000行日志(法2)
cat /var/lib/docker/containers/<dockerID>/<dockerID>-json.log
# 清除日志
cat /dev/null > /var/lib/docker/containers/<dockerID>/<dockerID>-json.log

三、安装WireGuard(Place1/wg-access-server项目)

  项目地址:https://github.com/Place1/wg-access-server

  配置说明:Configuration - wg-access-server

1. 安装

  终端中运行以下命令:

docker run -d \
  --cap-add NET_ADMIN \
  --device /dev/net/tun:/dev/net/tun \
  -v wg-access-server-data:/data \
  -e "WG_ADMIN_USERNAME=admin" \
  -e "WG_ADMIN_PASSWORD=123456" \
  -e "WG_WIREGUARD_PRIVATE_KEY=xxxxxxxx" \
  -e "WG_PORT=51821" \
  -e "WG_WIREGUARD_PORT=51820" \
  -e "WG_VPN_CIDR=10.0.32.0/24" \
  -e "WG_VPN_ALLOWED_IPS=0.0.0.0/0, ::/0" \
  -e "WG_LOG_LEVEL=info" \
  -e “WG_VPN_GATEWAY_INTERFACE=eth0” \
  -p 51821:51821/tcp \
  -p 51820:51820/udp \
  --restart unless-stopped \
  --privileged=true \
  place1/wg-access-server

  【配置说明】(红色部分对应的配置必须修改)

  ① 14~15行配置端口映射,:前为宿主机端口,:后为容器内端口。14行为管理面板的TCP端口,15行为WireGuard的UDP端口。宿主机端口需在服务器安全组放通。

  ② 16行用于开机自启动容器

  ③ 5~13行配置容器的环境变量,5~6行配置管理面板的用户名密码,7行为服务器私钥(可安装WireGuard的windows客户端,新建空隧道自动产生一个)。8~9行为容器内的管理面板TCP端口、WireGuard的UDP端口(建议此端口容器内和宿主机一致,否则在Web面板生成的客户端配置文件端口号是容器内的,需要手动改为宿主机的才能正确连接)。10行为客户端IP地址段。11行为允许访问的目标IP段。12行为全局日志级别。13行为WireGuard网关流量转发接口,需更改为宿主机的外网接口(可在终端内执行ifconfig命令,来查看外网接口名)。

2. 检查容器运行状态

docker ps -a

  如果运行状态中为Up,则表明容器运行正常。如果运行状态中一直为Restarting,则需要进一步从日志中检查错误原因。(详见 五、容器运行异常排查

3. 端口放通

  在服务器安全组中,放通TCP和UDP端口。本例中WireGuard管理面板为TCP (51821),WireGuard为UDP (51820)。

4. 访问管理面板

  管理面板地址:http://服务器公网IP:管理面板TCP端口号(本例端口为51820)

  输入配置的用户名和密码登入管理面板(本例为admin/123456)

四、客户端配置

  WireGuard应用下载:https://www.wireguard.com/install/

1. 配置信息生成

  在WireGuard管理面板中,输入设备名称后点击 “Add” 添加设备。

2. 导入配置信息

  电脑客户端直接下载配置文件,在WireGuard应用内新建隧道,将配置文件导入至隧道。手机客户端直接扫码即可添加节点。

图4 WireGuard节点添加
图5 配置信息获取

3. 连接建立:

1)点击 连接 按钮即可使能当前节点。

2)在Windows系统中打开CMD命令提示符,通过Ping其他节点,如果Ping正常即表明连接正常(注意:如果Ping的是Windows节点,则需要正确配置Windows系统防火墙或暂时关闭)。

图6 Ping测试

五、容器运行异常排查

1. 查看Docker容器运行日志:

1)记录对应容器的ID

docker ps -a
图7 容器ID查看

2)查看docker日志,根据日志错误情况进行解决。

docker logs <dockerID>

2. 错误处理

  下面仅提供一种错误的解决办法,其他错误自行查找资料。

错误exit status 3: iptables v1.8.3 (legacy): can't initialize iptables table `filter': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.

解决:升级Linux Kernel内核。

  参考:centos上docker无法启动 | 宋祎超

  内核的阿里云镜像:linux-kernel安装包下载_开源镜像站-阿里云

步骤:

1)获取内核文件

  找到合适版本或最新版本:https://mirrors.aliyun.com/linux-kernel/v5.x/linux-5.19.4.tar.gz

  终端执行:

wget https://mirrors.aliyun.com/linux-kernel/v5.x/linux-5.19.4.tar.gz
tar -xvf linux-5.19.4.tar.gz

2)配置内核选项

cd linux-5.19.4
make menuconfig

  按《参考》链接内容的说明设置好配置选项并保存。

  如果提示Unable to find the ncurses package. 则按照提示安装ncurses-devel 或 libncurses-dev其中一个即可。

3)编译模块(约需要2小时)

make clean
make modules -j 8  # 8核编译

4)安装模块

make modules_install

提示】如果安装模块时,出现以下错误,则需要检查编译是否顺利完成。

sed: can't read modules.order: No such file or directory

make: *** [Makefile:1478: __modinst_pre] Error 2

  可留意编译过程中的错误输出信息,或者重新执行make modules -j 8进行模块编译,将会直接打印错误信息。如果编译的错误信息为:

make[1]: *** No rule to make target 'certs/rhel.pem', needed by 'certs/x509_certificate_list'.  Stop.

  则编辑 linux-5.19.4 目录里的 .config 文件:

vim .config

  在vim编辑器内,查找并注释掉以下内容:

#CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"
#CONFIG_DEBUG_INFO_BTF=y

  保存后输入make modules -j 8重新编译即可。执行命令后如有选项则直接回车保持默认,直到屏幕显示开始编译。

5)编译并安装内核

make bzImage
make install

6)生效配置

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

7)查看内核版本是否已更新

uname -r

8)查看docker容器是否已经处于up状态

docker ps -a

猜你喜欢

转载自blog.csdn.net/Cx2008Lxl/article/details/126657827