wireGuard
Centos7
yum install yum-utils epel-release -y
yum-config-manager --setopt=centosplus.includepkgs=kernel-plus --enablerepo=centosplus --save
sed -e 's/^DEFAULTKERNEL=kernel$/DEFAULTKERNEL=kernel-plus/' -i /etc/sysconfig/kernel
yum install kernel-plus wireguard-tools -y
init 6
echo 0
# 目录创建
mkdir -pv /server/10-18
#指定时区 wireGuard ntp时间要精准
# WG_PORT=59783 客户端的配置文件udp中,映射主机的端口号
# WG_DEVICE 主机的物理网卡名称
# WG_DEFAULT_ADDRESS 指定客户端的子网网段
# WG_ALLOWED_IPS iptables 放行的子网网段
docker run -d \
-e TZ="Asia/Shanghai" \
--name="容器名称" \
-e WG_PORT=59783 \
-e WG_HOST=8.8.8.8 \
-e PASSWORD=123456 \
-e WG_DEVICE=ens32 \
-e WG_DEFAULT_ADDRESS=10.0.10.x \
-e WG_DEFAULT_DNS=223.5.5.5 \
-e WG_ALLOWED_IPS=10.0.10.0/24 \
-e WG_PERSISTENT_KEEPALIVE=25 \
-e WG_MTU=1420 \
-p 59783:51821/tcp \
-p 59783:51820/udp \
-v "创建的目录"/.wg-easy:/etc/wireguard \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
weejewel/wg-easy
docker run -d \
-e TZ="Asia/Shanghai" \
--name=test \
-e WG_PORT=59783 \
-e WG_HOST=8.8.8.8 \
-e PASSWORD=123456 \
-e WG_DEVICE=ens32 \
-e WG_DEFAULT_ADDRESS=10.0.10.x \
-e WG_DEFAULT_DNS=223.5.5.5 \
-e WG_ALLOWED_IPS=10.0.10.0/24 \
-e WG_PERSISTENT_KEEPALIVE=25 \
-e WG_MTU=1420 \
-p 59783:51821/tcp \
-p 59783:51820/udp \
-v /server/10-16/.wg-easy:/etc/wireguard \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
weejewel/wg-easy
wirGuard
''' Centos7 '''
yum install yum-utils epel-release -y
yum-config-manager --setopt=centosplus.includepkgs=kernel-plus --enablerepo=centosplus --save
sed -e 's/^DEFAULTKERNEL=kernel$/DEFAULTKERNEL=kernel-plus/' -i /etc/sysconfig/kernel
yum install kernel-plus wireguard-tools -y
打开转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
init 6
# ========================================== 升级内核后,重启===============================
ip link add wg0 type wireguard
# 添加硬件网卡
cd /etc/wireguard
# 进入软件配置文件
umask 077
# 修改一下文件和目录的权限 077 后,创建的文件和目录只有用户 读写权限 ,用户组和其他用户没有权限 umask 022 还原
'''
用法:wg <cmd> [<args>]
可用子命令:
show:显示当前配置和设备信息
showconf:显示给定WireGuard接口的当前配置,用于' setconf'
set:修改当前配置、添加、移除或更改对等体
setconf:将配置文件应用于WireGuard接口
addconf:为WireGuard接口追加配置文件
syncconf:将配置文件同步到WireGuard接口
genpsk:生成一个新的预共享密钥并将其写入标准输出
pubkey:从标准输入读取私钥,并将公钥写入标准输出
'''
# 公钥是私钥的衍生物,可以从私钥中生成, 不严谨的讲,可以通过私钥推导出公钥
wg genkey > private.key
# 创建一个私钥 genkey:生成一个新的私钥并将其写入标准输出
cat private.key |wg pubkey >public.key
# 通过私钥 创建一个公钥
# 一行命令 wg genkey | tee private.key | wg pubkey > public.key
因为 国内网络环境 家庭一般都没有公网IP ,所以都是NAT的环境,所以 wireguard 也是中继+ 节点的形式组成
中继服务器的作用又是作为流量转发的功能,以linux iptables 为主,那么4表5 链就是要掌握的东西
标准配置
Interface:
PrivateKey = 私钥信息
Address: 虚拟网段分配的iP 中继节点的话,需要是一个子网段,能转发整个子网的流量 ,也可以指定多个子网段
ListenPort: 是主机之间通讯使用的端口,是 UDP 协议的。
DNS: 进行解析,当endPoint为 域名的时候 ,要解析成IP
MTU: udp发包的容量 最大传输单元
Peer: 其他机器的标签
publickey 公钥信息
AllowedIPs 允许这个IP段或者 ip 走隧道
PersistentKeepalive = 25 # 说明
EndPoint: 公开的peer节点 必须是公网ip 或者这 域名
PreUP 接口启动前执行的命令
PostUP 接口 启动后 执行的命令
PreDown 接口结束前执行的命令
PostDown 接口结束后执行的命令
中继服务器必须将所有的节点定义为对等节点 ,除了中继服务器外,其他的客户端都不能将位于NAT后面的节点定义为 对等节点
因为路由不可达,对于只为自己路由流量的客户端,只需将中继服务器作为 对等节点 和 直接能访问到的节点
'''
客户端节点
[Interface]
# Name = pc-100
Address = 192.0.2.5/32
PrivateKey = xxxxxx
'''
'''
中继服务节点 的配置
[Interface]
# Name = 中继
Address = 192.0.2.1/24
ListenPort = 51820
PrivateKey = xxxxx 私钥
DNS = 1.1.1.1
'''
'''
peer的节点 路由不可达(一个局域网内的一台机器)
[peer]
'''
启动与停止
#
$ wg-quick up /full/path/to/wg0.conf
$ wg-quick down /full/path/to/wg0.conf
# 启动/停止 VPN 网络接口
$ ip link set wg0 up
$ ip link set wg0 down
# 注册/注销 VPN 网络接口
$ ip link add dev wg0 type wireguard
$ ip link delete dev wg0
# 注册/注销 本地 VPN 地址
$ ip address add dev wg0 192.0.2.3/32
$ ip address delete dev wg0 192.0.2.3/32
# 添加/删除 VPN 路由
$ ip route add 192.0.2.3/32 dev wg0
$ ip route delete 192.0.2.3/32 dev wg0
查看信息
#
接口:
# 查看系统 VPN 接口信息
$ ip link show wg0
# 查看 VPN 接口详细信息
$ wg show all
$ wg show wg0
地址:
# 查看 VPN 接口地址
$ ip address show wg0
路由
#
# 查看系统路由表
$ ip route show table main
$ ip route show table local
# 获取到特定 IP 的路由
$ ip route get 192.0.2.3
浙公网安备 33010602011771号