“曲折的内网建站经历”折腾openvpn和内网端口映射的笔记

创意&设计 CN-P5 7334℃ 0评论

国内网络环境我也不好说什么,为了更好地在互联网中学习和娱乐,弄部梯子也是有必要的,当然市售的vpn有很多,但这样就太没折腾精神了。之前我买了一个比较便宜的美国的vps主机,虽然价格便宜但是这个主机竟然自带了两个公网IP…当时感觉好奇葩,一直没想到怎么利用这个两个ip。最早为了方便简单搭梯子用的Shadowsocks最近想在自己的电脑上测试一些需要给别人看的网页于是打起了这两个ip的主意,现在国内的宽带都是不能对外网开80端口的,之前我做的一些web应用也都跑在其他端口上。后来经过研究发一个办法既能方便爬梯子也能把自己内网电脑的端口映射出去,那就是openvpn+iptables转发。
于是就有了下面的折腾:

首先得准备个VPS,配置可以很低,128M内存的就够用,我用的是512M内存的单核vps, OpenVZ类型的安装了Debian 7 32 Bit Minimal系统。处于美国西海岸速度尚可。

一、准备工作

在putty里

cat /dev/net/tun# 检查tun/tap在服务器上是否可用,我这个vps在控制面板中有tun的开启关闭选项,如果你的主机不可能也可以找找面板或者联系客服。 
apt-get install iptables #安装iptables,我的主机上默认已经安装过 跳过

 

二、安装openvpn

apt-get install openvpn  #安装openvpn

1、默认OpenVPN的easy-rsa文档会在/usr/share/doc/openvpn/examples/easy-rsa/,如果不在的话请先检查是否安装成功。然后将该文档下所需的配置文件复制到/etc/openvpn/下面可以用sftp工具或者putty用命令来:

cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/

然后就可以生成证书了

cd /etc/openvpn/easy-rsa/2.0

source vars

./clean-all

./build-ca

期间会提示输入一些信息,直接回车默认即可。

2、生成服务器端证书和密钥:(server为服务端名字可以自定义 默认不修改openvpn的服务器配置推荐不更改server)
./build-key-server server

期间也会提示输入一些信息,直接回车默认,选择[Y/n]的都选Y。

3、生成客户端证书和密钥:(client为客户端名字可以自定义,注意这里的客户端名字不能与上步的服务端名字相同)

./build-key client

期间也会提示输入一些信息,直接回车默认,选择[Y/n]的都选Y。 若要生成多个客户端的证书和密钥,将client改成另外的名字重复操作即可。所有生成的证书和密钥存都放在/etc/openvpn/easy-rsa/2.0/keys/下面。

4、生成Diffie Hellman参数:

./build-dh

 

三、配置openvpn

1、编辑/etc/openvpn/server.conf 文件,如果没有可以创建一个,加入下面的内容:(复制到VPS上时,最好把注释去掉)

local 11.22.33.44 #11.22.33.44为VPS的公网IP

port 1194 #端口,需要与客户端配置保持一致,并保证与其他软件无共用

proto udp #使用协议,需要与客户端配置保持一致

dev tun #也可以选择tap模式

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt

cert /etc/openvpn/easy-rsa/2.0/keys/server.crt

key /etc/openvpn/easy-rsa/2.0/keys/server.key

dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

ifconfig-pool-persist ipp.txt

server 10.10.0.0 255.255.255.0 #给客户的分配的局域网IP段,注意不要与客户端网段冲突!

push "redirect-gateway"

push "dhcp-option DNS 8.8.8.8"

push "dhcp-option DNS 8.8.4.4"

client-to-client

;duplicate-cn #若不止一人同时使用该证书,请去掉前面的;

keepalive 20 60

comp-lzo

max-clients 50

persist-key

persist-tun

status openvpn-status.log

log-append openvpn.log

verb 3

mute 20

2、设置IP转发,其实刚检查iptables_nat模块的步骤就是在设置转发IP,再重复一遍:
若Xen或KVM的请输入:(eth0要根据具体的网卡标示来,可以通过ifconfig查看)

iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o eth0 -j MASQUERADE

若OpenVZ的请输入:(11.22.33.44是你VPS的IP)

iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -j SNAT --to-source 11.22.33.44

可以使用下面的命令检查转发状态

iptables -t nat -L

3、修改/etc/sysctl.conf中的net.ipv4.ip_forward=1

net.ipv4.ip_forward = 1

重新载入/etc/sysctl.conf使其生效,执行如下命令:
sysctl -p

 

四、安装完成重启openvpn

/etc/init.d/openvpn restart

 

五、安装配置OpenVPN客户端文件

1、下载安装客户端
Windwos用户推荐去openvpn.net选择合适的版本进行安装,安装中的选项全部按默认即可;Mac用户推荐使用tunnelblick

2、下载之前在VPS上生成的客户端证书及密钥
证书和密钥存都在/etc/openvpn/easy-rsa/2.0/keys/里,可以使用winscp链接到VPS上下载,将ca.crt、client.crt、client.key这三个文件下载到OpenVPN客户端程序的config文件夹里,默认为:C:\Program Files\OpenVPN\config

3、创建客户端配置文件
在C:\Program Files\OpenVPN\config 下面创建一个client.ovpn的文件,添加如下内容:

client        #这个client不是自定义名称 不能更改
dev tun       #要与前面server.conf中的配置一致。
proto udp              #要与前面server.conf中的配置一致。
remote 11.22.33.44 8080    #将11.22.33.44替换为你VPS的IP,端口与前面的server.conf中配置一致。
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt              #具体名称以刚下载的为准
cert client.crt              #具体名称以刚下载的为准
key client.key              #具体名称以刚下载的为准
ns-cert-type server
redirect-gateway
keepalive 20 60
#tls-auth ta.key 1
comp-lzo
verb 3
mute 20
route-method exe
route-delay 2

运行OpenVPN GUI后,屏幕右下角的系统托盘区,右击它,点击Connect,过一会儿,OpenVPN图标变成绿色时就表示链接成功了。

六、配置端口转发

查看openvpn客户端的日志,能找到当前你的内网ip。鼠标放到托盘区的图标上也会显示ip。然后在putty里使用下面的命令配置端口转发:
iptables -t nat -A PREROUTING -p tcp -d 11.22.33.44 –dport 80 -j DNAT –to-destination 10.10.0.6:80
iptables -t nat -A POSTROUTING -p tcp -s 10.10.0.6 –sport 80 -j SNAT –to-source 11.22.33.44

其中:

第一行的11.22.33.44 –dport 80 是服务端的ip和需要在服务端对外的端口 10.10.0.6:80是openvpn客户端的ip也就是内网的机子ip和需要转发出去的端口,如果你内网机子的web服务在8080端口那么这里需要填写8080

第二行的10.10.0.6 –sport 80 是客户机的ip和需要转发的端口

到此,如果你配置你的域名解析到openvpn服务器的公网ip上那么你访问域名就能查看你的网站了。

转载请注明:黑白的自留地 » “曲折的内网建站经历”折腾openvpn和内网端口映射的笔记

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址