一、背景

由于目前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. 玩转服务器之网站篇:新手使用WordPress搭建博客和静态网站部署

    静态网站部署和WordPress搭建博客都是网站运营中常见的工作.静态网站是一种不需要服务器端脚本的网站形式,通常使用HTML.CSS和JavaScript等静态资源进行构建和显示.而WordPres ...

  2. R 语言柱状图示例笔记

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文章中链接. 一.基础柱状图 1. barplot 命令 基于barplot基础柱状图颜色.方向及分组的绘 ...

  3. [AGC055B] ABC Supremacy 题解

    [AGC055B] ABC Supremacy 题解 题目描述 给定两个长度为 \(n\) 的字符串 \(a\),\(b\). 你可以进行若干次以下操作: 若 \(a\) 中的一个子串为 ABC,BC ...

  4. CKS 考试题整理 (01)-NetworkPolicy

    Task 创建一个名为 pod-restriction 的 NetworkPolicy 来限制对在 namespace dev-team 中运行的 Pod products-service 的访问. ...

  5. 体细胞突变检测分析流程-系列1( WES&Panel)

    Sentieon●体细胞变异检测-系列1   Sentieon 致力于解决生物信息数据分析中的速度与准确度瓶颈,通过算法的深度优化和企业级的软件工程,大幅度提升NGS数据处理的效率.准确度和可靠性. ...

  6. 【FAQ】关于CP反馈的联运应用的常见结算问题小结

    问题一:为什么在"我的账户">>"收益"里面的金额和支付报表中的金额对不上 ? 关于联运类应用付费产品在华为平台上结算问题,您可以详细参考一下&qu ...

  7. Codeforces Round #880 (Div. 2) A-D

    A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; int cnt[107]; bool so ...

  8. clickhouse使用入门

    转载请注明出处(- ̄▽ ̄)-严禁用于商业目的的转载- 导语:同学,你也不想你根本不懂ClickHouse,却赶鸭子上架使用的事情被其他人知道吧? 写在前面:本文旨在让原先有一定SQL基础的人快速简单了 ...

  9. 4.10 x64dbg 反汇编功能的封装

    LyScript 插件提供的反汇编系列函数虽然能够实现基本的反汇编功能,但在实际使用中,可能会遇到一些更为复杂的需求,此时就需要根据自身需要进行二次开发,以实现更加高级的功能.本章将继续深入探索反汇编 ...

  10. http请求其他接口的utils

    首先在pom中加入 关于http需要的jar包 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcor ...