一、背景

由于目前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. Mysql DDL执行方式-pt-osc介绍 | 京东云技术团队

    1 引言 大家好,接着上次和大家一起学习了<MySQL DDL执行方式-Online DDL介绍>,那么今天接着和大家一起学习另一种MySQL DDL执行方式之pt-soc. 在MySQL ...

  2. 【VS Code 与 Qt6】QCheckBox的图标为什么不会切换?

    本篇专门扯一下有关 QCheckBox 组件的一个问题.老周不水字数,直接上程序,你看了就明白. #include <QApplication> #include <QWidget& ...

  3. 《数据结构》之栈和堆结构及JVM简析

    导言: 在数据结构中,我们第一了解到了栈或堆栈,它的结构特点是什么呢?先进后出,它的特点有什么用呢?我们在哪里可以使用到栈结构,栈结构那么简单,使用这么久了为什么不用其它结构替代? 一.程序在内存中的 ...

  4. Linux下程序时间消耗监控与统计

    良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序计时产 ...

  5. 深入理解 Istio 流量管理的超时时间设置

    环境准备 部署 httpbin 服务: kubectl apply -f samples/httpbin/httpbin.yaml 部署 sleep 服务: kubectl apply -f samp ...

  6. VSCode设置第三方字体

    最近需要写C,所以下了一个VSCode IDE嘛 当然是美观最重要了(不是 个人比较喜欢JetBrains家的字体 在IDEA中主要使用的是 JetBrains Mono 想着把VSCode的字体也设 ...

  7. HTML前端js

    ajax请求方法书写 $.ajax({ type:"POST", url:CONTEXT_PATH+"/appAudit/insertSnDocCountAdmin&qu ...

  8. 论文日记四:Transformer(论文解读+NLP、CV项目实战)

    导读 重磅模型transformer,在2017年发布,但就今天来说产生的影响在各个领域包括NLP.CV这些都是巨大的! Paper<Attention Is All You Need>, ...

  9. windows CMD命令的一些使用方法及注意事项

    windows CMD命令的一些使用方法及注意事项 转载请著名出处:https://www.cnblogs.com/funnyzpc/p/17572397.html 一.执行路径或参数带中文.空格.特 ...

  10. 万字长文浅析配置对MySQL服务器的影响

    有很多的服务器选项会影响这MySQL服务器的性能,比如内存中临时表的大小.排序缓冲区等.有些针对特定存储引擎(如InnoDB)的选项,也会对查询优化很有用. 调整服务器的配置从某种程度来说是一个影响全 ...