kexue shangwang
根据实践,pptp、IPsec甚至OpenVPN等kexue上网法已经无法顺利翻越GFW。通过抓包可知,GFW会将pptp的握手期间的ack包吞掉,导致本地一直无法收到服务器端的响应。而OpenVPN也是类似的情况。目前比较可行的上网法就是将OpenVPN的数据包进行混淆,封装成其它协议发送到服务端再解释,这时候就需要用到Obfsproxy。基本原理如下图:
笔者的软硬件环境如下:
Server:
- 东京机房VPS
- CentOS 6.5 32-bit
Client:
- Win 8.1
基本步骤如下:
- Server端安装Obfsproxy
- Server端安装OpenVPN
- Client端安装Obfsproxy
- Client端安装OpenVPN
基本软件环境要求:
Server端:
- Python2.7或以上版本(Obfsproxy需要Python2.7或以上的支持),对于CentOS 6.5或其它无法通过官方途径升级Python的系统,可以参考CentOS 下升级Python这篇文章。对于其中部分Python2.7的版本(Python 2 <2.7.9),请确保pip已正常安装及正常运行。
- OpenSSL及OpenSSL-devel。
Server端安装Obfsproxy:
- 安装Obfsproxy
pip2 install obfsproxy
此处使用pip还是pip2视具体系统环境而定。
- 配置Obfsproxy
将以下命令/usr/local/bin/obfsproxy obfs2 --dest=127.0.0.1:[server端openvpn所用端口号] server 0.0.0.0: [server端obfsproxy所用端口号]
添加到/etc/rc.local中,以便开机启动obfsproxy。其中“/usr/local/bin/obfsproxy”应替换成具体运行环境中obfsproxy的绝对路径,否则可能无法开机启动。
Server端安装OpenVPN:
- 运行命令:
yum install epel-release
- 安装OpenVPN
yum install openvpn easy-rsa -y
首先安装openvpn和easy-rsa。其中,easy-rsa用于生成安全密钥。
- 配置OpenVPN
将OpenVPN配置文件样板复制到OpenVPN目录下:cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
编辑/etc/openvpn/server.conf:
port [server端openvpn所用端口号] #使用的端口号,默认为1194,可以不更改
proto tcp #obfsproxy只支持tcp协议,因此只能设置为tcp
dev tun
ca ca.crt #证书、密钥文件
cert server.crt
key server.key
dh dh2048.pemserver 192.168.200.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
#以下命令用于设置客户端DNS,是具体情况而定,一般设置为Google DNS
push "dhcp-option DNS 8.8.4.4"
push "dhcp-option DNS 8.8.8.8"
keepalive 20 120
#设置openvpn运行后权限
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 5
- 生成密钥与证书
创建密钥存放目录:mkdir -p /etc/openvpn/easy-rsa/keys
将生成脚本复制到上面建立的目录中:
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
编辑生成脚本的基本环境变量(非开放VPN可忽略大多数参数):
vi /etc/openvpn/easy-rsa/vars
将KEY_NAME编辑为server
同步OpenSSL配置:cp /etc/openvpn/easy-rsa/openssl-1.0..cnf /etc/openvpn/easy-rsa/openssl.cnf
开始生成:
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh将证书与密钥移动到openvpn目录下:
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn生成Client端证书:
cd /etc/openvpn/easy-rsa
./build-key client - 路由设置
添加iptables规则(以下命令仅做参考,请确保openvpn及obfsproxy所使用的端口不被iptables禁止):iptables -t nat -A POSTROUTING -s 192.168.200.0/ -o eth0 -j MASQUERADE
保存,重启刷新规则:
service iptables save
service iptables restart设置允许转发:
vi /etc/sysctl.conf修改:ipv4.ip_forward =
刷新:sysctl –p开启openvpn服务及设置其开机启动
service openvpn start
chkconfig openvpn on - 将证书与密钥复制到客户端
需要复制的文件有:/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
至此,服务端配置工作完成。进入客户端配置。
Client端安装Obfsproxy
- 下载Windows版obfsproxy
- 配置obfsproxy
运行命令:obfsproxy.exe obfs2 socks 127.0.0.1: [client端obfsproxy所用端口号]
保持运行此程序。
- *将obfsproxy配置成Windows服务
可以使用C#编写一个基本服务来启动obfsproxy,编写方法此处不累述。
Client端安装OpenVPN
- 下载OpenVPN for Windows
- 配置client端:
新建ovpn文件并编辑内容如下:client
dev tun
proto tcp
remote [server地址] [server端obfsproxy所用端口号]
resolv-retry infinite
nobind
persist-key
persist-tun
verb 5
ca ca.crt
cert client.crt
key client.key
socks-proxy-retry
socks-proxy 127.0.0.1 [client端obfsproxy所用端口号]
- 将刚才下载的证书、密钥与此配置文件移动到OpenVPN安装目录下的config文件夹
- 使用OpenVPN GUI进行连接
实例配置:
[root@east-usa01 ~]# cat /etc/openvpn/server.conf |grep -v "^#"|grep -v "^;"|grep -v "^$"
local 47.****.224
port 1194
proto udp
dev tun
ca ca.crt
cert huanqiuvpn.crt
key huanqiuvpn.key # This file should be kept secret
dh dh1024.pem
server 10.8.200.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.4.4"
push "dhcp-option DNS 8.8.8.8"
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
kexue shangwang的更多相关文章
- Bandwagon的配置记录(一) —— kexue上网
写在前面 这是kexue上网的一种方法. 看文章前,先拉最底下,看一遍“写在最后”. 租个服务器 我租了个洛杉矶的服务器,系统是ubuntu16.04 x86_64 进入KiwiVM Control ...
- kexue shangwang002
需先搭建 openvpn 海外服务端, 具体参考 https://www.cnblogs.com/weifeng1463/p/11041550.html 选择阿里云华东ecs 搭建openvpn 的客 ...
- 架构师养成记--8.Queue
一.ConcurrentLinkedQueue 是一个适合在高并发场景下,无锁,无界的,先进先出原则.不允许为null值,add().offer()加入元素,这两个方法没区别:pull().peek( ...
- rsync错误日志
问题一: @ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(152 ...
- 杂乱无章之javascript(二)
1.浏览器与事件事件通常是由浏览器所产生,不同的浏览器会产生的事件也有所不同,即使同一浏览器不同版本所产生的事件也有不同.以下为HTML4.01中的事件 2.error事件:它可以调用一个错误处理函数 ...
- Windows 之间用rsync同步数据(cwRsyncServer配置)
rsync是一款优秀的数据同步软件,在跨服务器,跨机房,跨国备份服务器的首选工具,下面就来介绍下如何配置安装cwRsyncServer很大多数软件一样是B/C架构,cwRsyncServer是rsyn ...
- Java中的集合与线程的Demo
一.简单线程同步问题 package com.ietree.multithread.sync; import java.util.Vector; public class Tickets { publ ...
- 主机设置ss代理,虚拟机共享代理
代理的原理: 关于代理的具体的书面定义你百度谷歌可以知道.这里,我想简单通过一个例子,说明代理的原理: 假如,你在北京,但你女朋友在广州,你有东西要给你的女朋友,但是正好你这几天公司有事,所以你不能去 ...
- 自然语言处理中的自注意力机制(Self-attention Mechanism)
自然语言处理中的自注意力机制(Self-attention Mechanism) 近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中,之前我对早期注意力 ...
随机推荐
- P3375 模板 KMP字符串匹配
P3375 [模板]KMP字符串匹配 来一道模板题,直接上代码. #include <bits/stdc++.h> using namespace std; typedef long lo ...
- 解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF
通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说 ...
- springboot+Mybatis+MySql 一个update标签中执行多条update sql语句
Mysql是不支持这种骚操作的,但是不代表并不能实现,只需要在jdbc配置文件中稍微做一下修改就行. driver=com.mysql.jdbc.Driver url=jdbc:mysql://127 ...
- Go语言在国产CPU平台上应用前景的探索与思考
http://www.chinaaet.com/article/3000087559 0 引言 CPU是电子产品的核心,代表着信息产业的发展水平.CPU发展至今已经有四十多年的历史了,实际就是Inte ...
- Vue --- 基础指令
目录 表单指令 条件指令 循环指令 分隔符(了解) 过滤器 计算属性 监听属性 冒泡排序 表单指令 使用方法: v-model 数据双向绑定 v-model绑定的变量可以影响表单标签的值,反过来表单标 ...
- api的url规则设计,带参数的路由
api的url设计规则 router := gin.Default() router.GET("/topic/:topic_id", func(context *gin.Conte ...
- linux 出错 “INFO: task java: xxx blocked for more than 120 seconds.” 的3种解决方案
1 问题描述 最近搭建的一个linux最小系统在运行到241秒时在控制台自动打印如下图信息,并且以后每隔120秒打印一次. 仔细阅读打印信息发现关键信息是“hung_task_timeout_secs ...
- Tomcat启动问题:严重[main] org.apache.catalina.core.AprLifecycleListener.init An incompatible version...
今天观察tomcat启动日志,有一些以前没注意到的信息: 严重 [main] org.apache.catalina.core.AprLifecycleListener.init An incompa ...
- 干货 | 10分钟带你掌握branch and price(分支定价)算法超详细原理解析
00 前言 相信大家对branch and price的神秘之处也非常好奇了.今天我们一起来揭秘该算法原理过程.不过,在此之前,请大家确保自己的branch and bound和column gene ...
- 每日Android一问等你来解答-什么是Activity的生命周期?
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 什么是Activity的生命周期? 生命周期: 对于生命周期我们 ...