一、背景

由于目前openvpn的开源方案,链接VPN如果路由过多的话会导致链接速度变慢,效果非常的不理想,并且当iptables规则多的时候,转发明显性能下降;

准备采用wireguard的方式来代替openvpn的隧道协议,但是wireguard目前没有一个很好的权限管理方案;

二、服务端

2.1、安装wireguard

curl -O https://raw.githubusercontent.com/atrandys/wireguard/master/wg_mult.sh && chmod +x wg_mult.sh && ./wg_mult.sh

2.2、设置访问权限

环境变量:WG_PEER_IP可以获取连接着的IP地址

PostUp = /path/to/script.sh
PostDown = /path/to/teardown.sh

然后在根据情况设置ipset和iptables

2.3、脚本案例

#!/bin/bash
result=$(curl -s "VPN后端连接接口地址" | jq '.d')
permissionsAccept=($(jq '.accept[]' <<<$result))
permissionsDrop=($(jq '.drop[]' <<<$result)) # 创建新的ipset组
ipset create $WG_PEER_IP hash:ip
ipset create ${WG_PEER_IP}-drop hash:ip
for ((i=0;i<${#permissionsAccept[@]};i++))
do
ipset add $WG_PEER_IP ${permissionsAccept[$i]//\"/}
done for ((i=0;i<${#permissionsDrop[@]};i++))
do
ipset add ${WG_PEER_IP}-drop ${permissionsDrop[$i]//\"/}
done # 设置iptables生效规则
iptables -A FORWARD -s $WG_PEER_IP -m set --match-set ${WG_PEER_IP}-drop dst -j DROP
iptables -A FORWARD -s $WG_PEER_IP -m set --match-set $WG_PEER_IP dst -j ACCEPT
# 剩余没有匹配到的全部拒绝
iptables -A FORWARD -s $WG_PEER_IP -j DROP if [ $code = -1 ];then
exit 1 ;
fi
#!/bin/bash
iptables -D FORWARD -s $WG_PEER_IP -m set --match-set $WG_PEER_IP dst -j ACCEPT
iptables -D FORWARD -s $WG_PEER_IP -m set --match-set ${WG_PEER_IP}-drop dst -j DROP
iptables -D FORWARD -s $WG_PEER_IP -j DROP
ipset destroy $WG_PEER_IP
ipset destroy ${WG_PEER_IP}-drop

2.4、常用脚本变量

WIREGUARD_PUBKEY: Wireguard 公钥。默认值为 $HOME/.wireguard/wg0.key.

WIREGUARD_PRIVATE_KEY: Wireguard 私钥。默认值为 $HOME/.wireguard/wg0.pem.

WIREGUARD_SVC_IP: Wireguard 服务 IP 地址。默认值为 127.0.0.1.

WIREGUARD_SVC_PORT: Wireguard 服务端口。默认值为 9443.

WIREGUARD_DEV_IP: 设备的 IP 地址。默认值为 127.0.0.1.

WIREGUARD_DEV_PORT: 设备的端口。默认值为 9443.

WIREGUARD_NETWORK: Wireguard 网络名称。默认值为 mywireguard.

WIREGUARD_CHANNEL: Wireguard 通道名称。默认值为 channel0.

WIREGUARD_CONTROL_URL: Wireguard 控制页面 URL。

WG_PEER_DNS: Wireguard 通道的 peer DNS 名称。默认值为 mywireguard.com.

WG_PEER_IP: Wireguard 通道的 peer IP 地址。默认值为 192.168.0.100.

WG_CHANNEL_FAILURE_ACTION: Wireguard 通道失败时的处理方式。默认值为 continue.

WG_CONTROL_URL: Wireguard 控制页面 URL。

WG_PRIVATE_KEY: Wireguard 私钥。默认值为 $HOME/.wireguard/wg0.pem.

WG_PUBKEY: Wireguard 公钥。默认值为 $HOME/.wireguard/wg0.key.

WG_DEV_IP: 设备的 IP 地址。默认值为 127.0.0.1.

WG_DEV_PORT: 设备的端口。默认值为 9443.

WG_NETWORK: Wireguard 网络名称。默认值为 mywireguard.

WG_CHANNEL: Wireguard 通道名称。默认值为 channel0.

WG_CONTROL_MODE: Wireguard 控制模式 (0 表示禁用,1 表示启用)。默认值为 0.

三、客户端

3.1、二进制文件

我对wireguard-tools的评价 {{< rating 5 5>}}

mac: https://www.123pan.com/s/cRk7Vv-NLSsH.html 提取码:2Zcc

这里要注意下,Mac因为他必须是sudo运行,但是不可能每次都输入密码,那么基本上等于废弃了,所以需要做一个初始化,把wg-quick设置成免输入密码的,代码如下:

echo "$USER ALL=(ALL) NOPASSWD:这里改成你wg-quick的绝对路径" | sudo tee -a /etc/sudoers.d/wireguard

win: https://github.com/WireGuard/wireguard-tools/blob/master/src/wg-quick/darwin.bash

win的可以直接使用这个脚本,也可以自己编译一个

通过iptables进行wireguard的权限管理的更多相关文章

  1. # openVPN+LDAP AD认证,组权限管理

    # openVPN+LDAP AD认证,组权限管理 原创内容http://www.cnblogs.com/elvi/p/7661178.html # openVPN+LDAP AD认证,组权限管理 # ...

  2. sudoers权限管理

    该/etc/sudoers文件的权限管理很完善,覆盖了linux中的各种命令,各种shell.编辑器等等,在此留作以后作为参考. # This file MUST be edited with the ...

  3. Linux 服务器用户权限管理改造方案与实施项目

    Linux 服务器用户权限管理改造方案与实施项目 在了解公司业务流程后,提出权限整改方案改进公司超级权限root泛滥的现状. 我首先撰写方案后,给boss看,取得boss的支持后,召集大家开会讨论. ...

  4. MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置

    文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...

  5. Android权限管理之RxPermission解决Android 6.0 适配问题

    前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...

  6. Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...

  7. Android权限管理之Permission权限机制及使用

    前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...

  8. SpringMVC+Shiro权限管理【转】

    1.权限的简单描述 2.实例表结构及内容及POJO 3.Shiro-pom.xml 4.Shiro-web.xml 5.Shiro-MyShiro-权限认证,登录认证层 6.Shiro-applica ...

  9. Android6.0运行时权限管理

    自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装 ...

  10. Oracle 表空间和用户权限管理

    一. 表空间 Oracle数据库包含逻辑结构和物理结构. 数据库的物理结构指的是构成数据库的一组操作系统文件. 数据库的逻辑结构是指描述数据组织方式的一组逻辑概念以及它们之间的关系. 表空间是数据库逻 ...

随机推荐

  1. Java并发(九)----线程join、interrupt

    1.join 方法详解 1.1 为什么需要 join? 下面的代码执行,打印 r 是什么? static int r = 0; public static void main(String[] arg ...

  2. UpSetR 高级参数使用教程

    在<UpSetR:多数据集绘图可视化处理利器>中我们介绍了 UpSetR 的一些概念和绘图基础参数使用,今天我们来学习一下 UpSetR 的 queries 和 attribute.plo ...

  3. 5月这几个API安全漏洞值得注意!

    5月份的一些API安全漏洞报告 希望大家查漏补缺 及时修复自己API可能出现的漏洞 No.1 微软.NET Core漏洞 漏洞详情:微软官方发布公告称,其.NET Core 2.1.3.1和5.0版本 ...

  4. 2023-06-12:如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数。 现在,给定两个正整数 L 和 R (以字符串形式表示), 返回包含在范围 [L, R] 中

    2023-06-12:如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数. 现在,给定两个正整数 L 和 R (以字符串形式表示), 返回包含在范围 [L, R] 中 ...

  5. 亮点预告!金蝶云·苍穹技术开放日第五期AI专场邀你围观!

    「金蝶云·苍穹技术开放日」系列活动由金蝶云苍穹平台生态部主办,迄今已成功举办三期,旨在为开发者提供技术分享和行业交流的平台. ​ 每一期我们都会聚焦一个技术主题,邀请本领域权威技术专家和外部嘉宾分享技 ...

  6. 将HTML网页转换为Markdown格式的工具及方法

    保存博客文章 早期在markdown语法还没有推出来之前,编写blog是在网页上或olw写的,也就是文章是保存在对方的主机上. 最近计划把我在博客园的一些早期html文章转换成markdown的文件, ...

  7. 2023-06-17:说一说redis中渐进式rehash?

    2023-06-17:说一说redis中渐进式rehash? 答案2023-06-17: 在Redis中,如果哈希表的数组一直保持不变,就会增加哈希冲突的可能性,从而降低检索效率.为了解决这个问题,R ...

  8. K8S | 容器和Pod组件

    对比软件安装和运行: 一.场景 作为研发人员,通常自己电脑的系统环境都是非常复杂,在个人的习惯上,是按照下图的模块管理电脑的系统环境: 对于「基础设施」.「主机操作系统」.「系统软件」来说,通常只做配 ...

  9. java解析CSV文件(zipFiles 打成压缩包 exportObeEventDataExcel 前端页面响应)

    JAR包及代码17:39:09 <!-- https://mvnrepository.com/artifact/com.opencsv/opencsv --> <dependency ...

  10. 数据分析之jupyter notebook工具

    一.jupyter notebook介绍 1.简介 Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文档编写.运行代码和展示结果.--Jupyter ...