BadVPN详解之--编译与运行
来源:互联网 发布:java入门培训费用 编辑:程序博客网 时间:2024/06/06 05:46
前言
还是要感谢穿皮鞋的经理,为我指示了tun2socks这条路,然则经理日理万机无暇挖掘这种纯技术的东西,只知道有这么回事就OK了,等到需要的时候,用上即可...但我等非经理就不同了,只能撸代码,撸原理。从tun2socks一路撸下来,就是BadVPN了。
0.什么是BadVPN
BadVPN是另一种VPN框架,和OpenVPN平级等同,但是我个人认为它要比OpenVPN更加优秀。OpenVPN能实现的,BadVPN几乎都能实现,重要的是,BadVPN是一种更加优雅的Client2client的VPN实现。具体套路如何,本文不细讲,本文的目标是先让BadVPN跑起来,至于原理什么的,留到下一篇文章里细说。
1.阅读文档
和往常一样,我首先google关于BadVPN的一切,很遗憾,资源很有限,baidu的结果更是扯。所以和OpenVPN以及BBR一样,又让我树立了标杆,我决定自己来写。当然在写之前,我还是要把现有的资料先读完。首先我阅读了它的全部文档:https://code.google.com/archive/p/badvpn/wikis
从文档介绍中,我知道了BadVPN是一个控制与数据完全分离的VPN框架,这一点和OpenVPN完全不同,但这个并非本文的内容,而是下一篇文章的主题。本文是一个HowTo,旨在把BadVPN先跑起来。
2.下载源码
在资源有限的情况下,源码就是最好的资源,我当然会下载它,我用的是这个版本:https://github.com/ambrop72/badvpn当然,我下载源码的目的不是去阅读它,而是去运行它。我把源码解压后放在了/root/badvpn/目录下。
3.编译源码
在我的CentOS机器上,我首先安装了BadVPN所依赖的nss,nspr以及cmake:yum install nss-devel
yum install nspr-devel
yum install cmake
然后我开始编译BadVPN:
cmake /root/badvpn/badvpn-master -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1 -DBUILD_SERVER=1 -DBUILD_CLIENT=1
上面的cmake处理的含义是,编译tun2socks,badvpn-server,badvpn-client三个模块。
cd /root/badvpn/badvpn-master
make && make install
编译成功!
4.运行BadVPN
这里有详细的实例文档,我阅读并验证了它:https://code.google.com/archive/p/badvpn/wikis/Examples.wiki我准备用3台设备组网,1台设备作为服务端,2台设备为客户端。拓扑以及配置如下:
4.1.运行服务端
在设备1上运行:badvpn-server --listen-addr 0.0.0.0:7000 --loglevel 4 --logger stdout --ssl --nssdb sql:/home/vpnserver/nssdb --server-cert-name "vpnca"
以下是输出:
NOTICE(server): initializing BadVPN server 1.999.130
NOTICE(server): entering event loop
INFO(server): client 0 (192.168.44.131:55685): initialized
INFO(server): client 0 (192.168.44.131:55685) (peer-3): handshake complete
INFO(server): client 0 (192.168.44.131:55685) (peer-3): received hello
INFO(server): client 1 (192.168.44.129:40448): initialized
INFO(server): client 1 (192.168.44.129:40448) (peer-2): handshake complete
INFO(server): client 1 (192.168.44.129:40448) (peer-2): received hello
INFO(server): client 0 (192.168.44.131:55685) (peer-3): accepted 1
INFO(server): client 1 (192.168.44.129:40448) (peer-2): accepted 0
4.2.运行客户端
在设备2上运行:tunctl -u root -t tap0
ifconfig tap0 10.10.10.131/24 up
badvpn-client --server-addr 192.168.44.100:7000 --transport-mode udp --encryption-mode none --hash-mode none --scope local1 --bind-addr 0.0.0.0:8000 --num-ports 30 --ext-addr 1.1.1.131:8000 local1 --tapdev tap0 --loglevel 4 --server-name "vpnca" --ssl --nssdb sql:/home/vpnclient/nssdb --client-cert-name "peer-3" --encryption-mode blowfish --hash-mode md5 --otp blowfish 3000 2000
以下是输出:
NOTICE(client): initializing BadVPN client 1.999.130
INFO(client): device MTU is 1514
NOTICE(client): entering event loop
NOTICE(ServerConnection): connected
INFO(client): server: ready, my ID is 0
...
在设备3上运行:
tunctl -u root -t tap0
ifconfig tap0 10.10.10.129/24 up
badvpn-client --server-addr 192.168.44.100:7000 --transport-mode udp --encryption-mode none --hash-mode none --scope local1 --bind-addr 0.0.0.0:8000 --num-ports 30 --ext-addr 1.1.1.129:8000 local1 --tapdev tap0 --loglevel 4 --server-name "vpnca" --ssl --nssdb sql:/home/vpnclient/nssdb --client-cert-name "peer-2" --encryption-mode blowfish --hash-mode md5 --otp blowfish 3000 2000
以下是输出:
NOTICE(client): initializing BadVPN client 1.999.130
INFO(client): device MTU is 1514
NOTICE(client): entering event loop
NOTICE(ServerConnection): connected
INFO(client): server: ready, my ID is 1
INFO(client): peer 0 (peer-3): initialized; talking to peer in SSL server mode
NOTICE(client): peer 0 (peer-3): bound to address number 0
INFO(client): peer 0 (peer-3): up
-----------------------------------------------
运行成功,无错误输出。
5.玩法
此时在设备2上执行一个ping,即ping设备3的tap0的地址:ping 10.10.10.129
显然是通了!抓包,当然是密文。然而你知道以上的输出是什么意思吗?你觉得数据会经由什么路径到达目的地呢?你觉得加密的密钥是如何来的呢?且听下回分解!
0 0
- BadVPN详解之--编译与运行
- BadVPN详解之--始记:透明socks代理与tun2socks
- BadVPN详解之--始记:透明socks代理与tun2socks
- BadVPN详解之--组网原理剖析
- BadVPN详解之--题外话:我之前自研的一个设计
- uClinux的编译与运行详解-转
- uClinux的编译与运行详解
- uClinux编译与运行详解(mcuos)
- Java之编译时与运行时
- java编译时与运行时概念与实例详解
- java编译运行详解
- EditPlus3编译与运行
- java 编译与运行
- java编译与运行
- Java之运行时异常与编译时异常区别
- Java之运行时异常与编译时异常区别
- Java之运行时异常与编译时异常区别
- java8 lambda学习笔记之编译与运行过程
- 【HTML】图像标签、文本、表格的颜色及其背景色
- 动态监听用户输入,延时提交内容
- BadVPN详解之--始记:透明socks代理与tun2socks
- 直方图均衡化和规定化
- javaweb开发中Servlet三大域对象的应用
- BadVPN详解之--编译与运行
- ubuntu 16.04安装软件(自用资料)
- WebService基础教程之二(Ajax调用WebService服务)
- BadVPN详解之--组网原理剖析
- Servlet3.0新特性(从注解配置到websocket编程)
- 仿ios各种对话框实现,妈妈再也不用担心了
- Error:Execution failed for task >!zip.isFile()
- Playfair 加密算法
- 有趣的题目:四色着色问题算法研究