根据实践,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:

  • 运行命令:

    1. yum install epel-release
  • 安装OpenVPN
    1. yum install openvpn easy-rsa -y

    首先安装openvpn和easy-rsa。其中,easy-rsa用于生成安全密钥。

  • 配置OpenVPN
    将OpenVPN配置文件样板复制到OpenVPN目录下:
    1. 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的更多相关文章

  1. Bandwagon的配置记录(一) —— kexue上网

    写在前面 这是kexue上网的一种方法. 看文章前,先拉最底下,看一遍“写在最后”. 租个服务器 我租了个洛杉矶的服务器,系统是ubuntu16.04 x86_64 进入KiwiVM Control ...

  2. kexue shangwang002

    需先搭建 openvpn 海外服务端, 具体参考 https://www.cnblogs.com/weifeng1463/p/11041550.html 选择阿里云华东ecs 搭建openvpn 的客 ...

  3. 架构师养成记--8.Queue

    一.ConcurrentLinkedQueue 是一个适合在高并发场景下,无锁,无界的,先进先出原则.不允许为null值,add().offer()加入元素,这两个方法没区别:pull().peek( ...

  4. rsync错误日志

    问题一: @ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(152 ...

  5. 杂乱无章之javascript(二)

    1.浏览器与事件事件通常是由浏览器所产生,不同的浏览器会产生的事件也有所不同,即使同一浏览器不同版本所产生的事件也有不同.以下为HTML4.01中的事件 2.error事件:它可以调用一个错误处理函数 ...

  6. Windows 之间用rsync同步数据(cwRsyncServer配置)

    rsync是一款优秀的数据同步软件,在跨服务器,跨机房,跨国备份服务器的首选工具,下面就来介绍下如何配置安装cwRsyncServer很大多数软件一样是B/C架构,cwRsyncServer是rsyn ...

  7. Java中的集合与线程的Demo

    一.简单线程同步问题 package com.ietree.multithread.sync; import java.util.Vector; public class Tickets { publ ...

  8. 主机设置ss代理,虚拟机共享代理

    代理的原理: 关于代理的具体的书面定义你百度谷歌可以知道.这里,我想简单通过一个例子,说明代理的原理: 假如,你在北京,但你女朋友在广州,你有东西要给你的女朋友,但是正好你这几天公司有事,所以你不能去 ...

  9. 自然语言处理中的自注意力机制(Self-attention Mechanism)

    自然语言处理中的自注意力机制(Self-attention Mechanism) 近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中,之前我对早期注意力 ...

随机推荐

  1. appium+python自动化63-使用Uiautomator2报错问题解决

    前言 appium desktop V1.7.1版本使用命令行版本启动appium后,使用Uiautomator2定位toast信息报错:appium-uiautomator2-server-v0.3 ...

  2. 【pathon基础】初识python

    一.python的起源 作者:Guido van Rossum(龟叔) 设计原则:优雅,简单,明确 二.解释型语言VS编译型语言 1.解释型语言:C#.python step1:程序员写代码: ste ...

  3. 使用vault pki engine 方便的管理证书

    vault 是一个很方便的secret .敏感数据管理工具,当前的版本已经包含了UI,使用起来很方便 以下演示一个简单的pki 管理 项目使用docker-compose 运行,为了简单使用单机开发模 ...

  4. RookeyFrame bin 目录

    如果把bin目录删掉,重新生成的话,还需要加载很多东西哦,具体可以对比一下下载下来的文件

  5. [Gradle] 发布 library 到本地 maven 仓库

    Java Library // publish_local_java.gradle apply plugin: 'maven-publish' publishing { publications { ...

  6. CF #365 DIV2 D Mishka and Interesting sum 区间异或+线段树

    D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...

  7. HTML盒子模型冷知识!!!

    一.边框    1.边框颜色     border-color 边框颜色(可以设置上边框,如:border-top-color,也可以整体设置,但是要注意顺序)     2.边框粗细     bord ...

  8. Comparison of SIFT Encoded and Deep Learning Features for the Classification and Detection of Esca Disease in Bordeaux Vineyards(分类MobileNet,目标检测 RetinaNet)

    识别葡萄的一种虫害,比较了传统SIFT和深度学习分类,最后还做了目标检测 分类用的 MobileNet,目标检测 RetinaNet MobileNet 是将传统深度可分离卷积分成了两步,深度卷积和逐 ...

  9. mysql 创建时间字段

    alter table table1 add order_date datetime null; mysql> select * from table1; +----------+------- ...

  10. CF830E Perpetual Motion Machine

    题面 题解 神仙构造题. 分五种情况考虑: 如果存在一个环,那么令环上的点权值为\(1\),其余点权值为\(0\). 如果存在一个度数大于\(3\)的点,令这个点的权值为\(2\),和它相邻的点权值为 ...