openwrt下openvpn 53端口UDP VPN架设
看了openwrt.org.cn的关于OPENWRT下OPENVPN服务器架设,一直尝试着在自己的DB120下架设VPN服务器。而用途最广的就要数53 UDP端口的OPENVPN服务器。
参照教程方法,证书一直都弄不好,后来下载WINDOWS版OPENVPN,在WINDOWS下生成证书,再将证书复制进DB120B。
试着将端口改为53 UDP,OPENVPN一直不能正常运行。查阅有关资料,发现是DHCP占用了53端口,将DHCP服务终止掉(本人最先使用更改DHCP服务文件文件名阻止DHCP服务,后来发现可以使用软件管理DHCP服务,详见OPENWRT 启动管理器 Initscripts 安装与使用),OPENVPN已经可以运行了。连载LAN口的电脑已经可以通过OPENVPN客户端连接OPENVPN了。但由于路由的DHCP服务被终止,所以只能手动指定IP。因为上级路由无法做端口映射,所以并未测试远端电脑是否可以通过DB120 WAN口连接VPN并共享本地IP上网。所以最终并未采取这种方案,有兴趣的朋友可以测试下这种方案。
我最终所采取的方案是双DB120。主DB120连接ADSL拨号,LAN使用192.168.1.X 网段,二级DB120 WAN连接一级DB120使用192.168.2.X网段,并指定IP为192.168.1.2。OPENVPN安装在二级路由上,并设置OPENVPN服务器端口为54 UDP,然后在一级路由中添加端口映射,如下图
将外部端口设置为53,协议选择TCP+UDP(这个可以根据自身情况选择),内部IP设置为二级路由WAN IP,内部端口设置为54(跟二级路由上的OPENVPN服务端端口相同即可)
现在已经远端电脑已经可以连接到二级路由上的VPN了,并且获取到二级路由的IP(192.168.2.X),然而远端电脑的外网IP并不是OPENVPN的外网IP。按照原教程设置虚拟连接 跃点计数 依然不行。经多放查找资料,原来是要将远端电脑网关设置成二级路由内网IP。具体方法只需在客户端配置文件中加入
route-gateway 192.168.2.1
redirect-gateway
即可。
经测试本VPN可以绕过高校内WLAN捷锐WEB验证,CMCC和ChinaNET 貌似已经封堵了此漏洞
下面是本人的
my-vpn.conf文件[code=php]dev tap0 port 54 proto udp comp-lzo yes keepalive 10 60 verb 3 secret /etc/openvpn/static.key #ca /etc/openvpn/ca.crt #dh /etc/openvpn/dh1024.pem #cert /etc/openvpn/server.crt #key /etc/openvpn/server.key #status-version 2 log /etc/openvpn/openvpn0.log status /etc/openvpn/server.status #tls-auth /etc/openvpn/ta.key 0 # Custom Configuration #auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env #client-cert-not-required #username-as-common-name [/code]
client.ovpn文件
[code=php]#tls-client dev tap0 secret key.txt ##这是前面生成的共享密钥文件,你可以复制到客户端自行改名 proto udp remote XXX.XXX.XXX.XXX 53 ##路由器的IP地址(动态域名)和端口, keepalive 10 60 route-gateway 192.168.2.1 ##路由器网关地址也就是路由器私网地址 redirect-gateway verb 3 float #ca ca.crt #cert client1.crt #key client1.key #tls-auth ta.key 1 #ns-cert-type server comp-lzo #auth-user-pass script-security 3[/code]
以下是http://www.openwrt.org.cn/bbs/viewthread.php?tid=365&extra=page%3D1原文,桥接脚本以及OPENVPN安装可参考下文
网络上关于Linux下架设openvpn的资料很多,openwrt也是linux,所以基本设置大同小异,但关于openwrt下的vpn网络环境设置中文资料很少!现将自已的设置过程贴出,仅供大家参考!一、openvpn简介
OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。
OpenVPN允许参与建立VPN的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库,以及SSLv3/TLSv1协议。
OpenVPN能在Linux、xBSD、Mac OS X与Windows 2000/XP上运行。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。 Openvpn的优点或者是区别于pptp的是:设置灵活,功能强大,支持自定义端口,支持tcp或udp协议,支持http和sock代理,支持加密遂道。
openvpn网址:http://openvpn.net/ 建议新手先安装win版openvpn熟悉相关设置和使用!
详见:http://forum.51nb.com/viewthread ... a=page%253D1&page=1
二、openvpn安装设置
openwrt的软件包中包含有最新版的openvpn 2.1.1 ,web界面安装就行了!
(注意:BCM6358系列现有openwrt0414中文版需要单独重新安装admin提供的kmod-tun,详见: http://www.openwrt.com.cn/bbs/vi ... =219&extra=page%3D1 五楼,kmod-tun安装后需要重启路由器才能启用,后续新版要看具体情况确定需不需要单独安装kmod-tun)
openvpn的配置有点对点、路由、桥接等多种模式,用户验证方式有共享密钥、动太证书、用户口令等多种方式,本次教程只介绍最简单的静态密钥+桥接模式配置!!好了,现在步入正题。
1、 首先确认openwrt的wan、lan正常使用中,安装虚拟网卡驱动模块kmod-tun和openvpn,openvpn-easy-rsa是用于生成密钥和证书,如果需要用到数据压缩功能传输,请安装lzo模块。我自已是以前就在winxp下使用win版openvpn生成了密钥和证书(以前在TOMATO下架设VPN),然后拷入到/etc/openvpn目录中使用,如果你需要在openwrt下生成密钥和证书,就请安装openvpn-easy-rsa部件,使用方法详见附件!
2、 启用虚拟网卡tap0并加入br-lan网桥。 这个是关键地方,这种方法是openwrt推荐的方法,也是网络设置最简便的。
原理是将虚拟网卡tap0接口加入已经建立的br-lan网桥中,所有经tap0接入的连接全部视同lan接入,无需重新配置nat、forward等。
root@OpenWrt# brctl show ##显示现有网桥情况
- bridge name bridge id STP enabled interfaces
- br-lan 8000.007404037df3 no eth1.0
- wlan0
- #!/bin/sh
- #/etc/openvpn/startupscript
- # OpenVPN Bridge Config File
- # Creates TAP devices for use by OpenVPN and bridges them into OpenWRT Bridge
- # Taken from http://openvpn.net/bridge.html
- # Define Bridge Interface
- # Preexisting on OpenWRT
- br="br-lan"
- # Define list of TAP interfaces to be bridged,
- # for example tap="tap0 tap1 tap2".
- tap="tap0"
- case "$1" in
- up)
- # Make sure module is loaded
- insmod tun
- # Build tap devices
- for t in $tap; do
- openvpn --mktun --dev $t
- done
- # Add TAP interfaces to OpenWRT bridge
- for t in $tap; do
- brctl addif $br $t
- done
- #Configure bridged interfaces
- for t in $tap; do
- ifconfig $t 0.0.0.0 promisc up
- done
- ;;
- down)
- for t in $tap; do
- ifconfig $t 0.0.0.0 down
- done
- for t in $tap; do
- brctl delif $br $t
- done
- for t in $tap; do
- openvpn --rmtun --dev $t
- done
- rmmod tun
- ;;
- *)
- echo "$0 {up|down}"
- ;;
- esac
然后执行一次:
/etc/openvpn/startupscript up
就可以将tap0加入到br-lan桥中了。
root@OpenWrt# brctl show ###显示现有网桥情况,多了个tap0 .
- bridge name bridge id STP enabled interfaces
- br-lan 8000.007404037df3 no eth1.0
- wlan0
- tap0
ok,openvpn的网络环境基本完成。
4、生成共享密钥
使用如下命令生成静态密钥:
openvpn --genkey --secret static.key
openvpn的所有配置文件都在etc/openvpn这个目录下!生成的static.key位于/etc/openvpn,你可以将这个文件复制到客户端使用。静态密钥文件由ascii组成,就像下面这样:
- -----BEGIN OpenVPN Static key V1-----
- e5e4d6af39289d53
- 171ecc237a8f996a
- 97743d146661405e
- c724d5913c550a0c
- 30a48e52dfbeceb6
- e2e7bd4a8357df78
- 4609fe35bbe99c32
- bdf974952ade8fb9
- 71c204aaf4f256ba
- eeda7aed4822ff98
- fd66da2efa9bf8c5
- e70996353e0f96a9
- c94c9f9afb17637b
- 283da25cc99b37bf
- 6f7e15b38aedc3e8
- e6xxxxxxxxxxxxx63
- -----END OpenVPN Static key V1-----
/etc/openvpn/my-vpn.conf
- dev tap0
- port 443
- proto tcp-server
- comp-lzo yes
- keepalive 10 60
- verb 3
- secret /etc/openvpn/static.key
- #ca /etc/openvpn/ca.crt
- #dh /etc/openvpn/dh1024.pem
- #cert /etc/openvpn/server.crt
- #key /etc/openvpn/server.key
- #status-version 2
- log /etc/openvpn/openvpn0.log
- status /etc/openvpn/server.status
- #tls-auth /etc/openvpn/ta.key 0
- # Custom Configuration
- #auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
- #client-cert-not-required
- #username-as-common-name
openvpn --daemon --config /etc/openvpn/my-vpn.conf
PS:
openwrt本身自带Luci-openvpn配置页面,UCI配置vpn服务参数差不多,我只是图简单手工修改配置文件,用指定配置文件来启动openvpn。
5月5日更新: 增加luci设置openvpn服务方法:
5-2-1、web界面安装luci-app-openvpn,在-服务--openvpn里设置:
a、直接利用custom_config调用自定义配置文件;
b、修改sample_server配置内容或新建vpn0配置:如图:
5-2-2、通过luci修改custom_config、sample_server或vpn0的配置相关内容如下( 或者直接修改/etc/config/openvpn文件内容):
- config 'openvpn' 'custom_config'
- option 'config' '/etc/openvpn/my-vpn.conf' #自定义调用前面的my-vpn.conf ,暂不用此配置
- config 'openvpn' 'sample_server'
- option 'port' '443'
- option 'dev' 'tap0'
- option 'ca' '/etc/openvpn/ca.crt'
- option 'cert' '/etc/openvpn/server.crt'
- option 'key' '/etc/openvpn/server.key'
- option 'dh' '/etc/openvpn/dh1024.pem'
- option 'keepalive' '10 120'
- option 'comp_lzo' '1'
- option 'persist_key' '1'
- option 'persist_tun' '1'
- option 'log' '/etc/openvpn/openvpn.log'
- option 'verb' '3'
- option 'enable' '0' #0.不启用
- option 'proto' 'tcp'
- option 'client_to_client' '1'
- option 'dev_type' 'tap'
- config 'openvpn' 'sample_client'
- option 'enable' '0' #0.不启用
- option 'client' '1'
- option 'dev' 'tun'
- option 'proto' 'udp'
- list 'remote' 'my_server_1 1194'
- option 'resolv_retry' 'infinite'
- option 'nobind' '1'
- option 'persist_key' '1'
- option 'persist_tun' '1'
- option 'ca' '/etc/openvpn/ca.crt'
- option 'cert' '/etc/openvpn/client.crt'
- option 'key' '/etc/openvpn/client.key'
- option 'comp_lzo' '1'
- option 'verb' '3'
- config 'openvpn' 'vpn0'
- option 'enable' '1' # 1.启用
- option 'port' '443'
- option 'dev' 'tap0'
- option 'comp_lzo' '1'
- option 'secret' '/etc/openvpn/static.key'
- option 'verb' '3'
- option 'dev_type' 'tap'
- option 'proto' 'tcp-server'
- option 'persist_key' '1'
- option 'persist_tun' '1'
- option 'log' '/etc/openvpn/openvpn.log'
- option 'keepalive' '10 60'
/etc/init.d/openvpn start
用ps命令可以看到openvpn进程了,说明成功启动!
- 3790 root 3000 S /usr/sbin/openvpn --syslog openvpn(vpn0) --writepid /
- 3791 root 1308 R ps
win版openvpn客户端配置文件: /programs/openvpn/config/client.ovpn
- #tls-client
- dev tap0
- secret key.txt ##这是前面生成的共享密钥文件,你可以复制到客户端自行改名
- ;http-proxy-retry
- ;http-proxy xxx.xxx.xxx.xx 80 authfile ##代理服务器地址和端口+自动验证代理用户口令文件
- proto tcp-client
- remote 192.168.3.1 443 ##路由器的IP地址(动态域名)和端口,
- keepalive 10 60
- verb 3
- float
- #ca ca.crt
- #cert cfan.crt
- #key cfan.key
- #tls-auth ta.key 1
- #ns-cert-type server
- comp-lzo
- #auth-user-pass
至于这么复杂架设个openvpn有什么作用?大家baidu一下就知道啦!自已发挥想像吧!
提示一下:利用vpn可以突破各种内网封锁、自由上网,运气好你还可以免费使用chinanet-wlan(网上有收费的vpn,其实也是改造过的openvpn)
20100731更新:
注意:按照本教程设置后,客户端连接vpn,正常情况下应该就能通过VPN通道上外网了,可以登录www.ip138.com验证你的外网IP,这也就是所谓的vpn翻墙技术。
部分网友反应:客户端连接VPN正常,但不能通过VPN上外网,这是win双网关的路由问题,当同时有两个本地连接时,所有网络连接默认走的会是缺省网关路由,如果你的缺省网关是本地连接(即非vpn网关),那么就无法通过vpn连接上外网的。解决办法是手工调整路由跃点数值来控制在 IP 流量路由中首先使用的网络接口,即调整缺省网关:
WinXP通过ipconfig /all,可以看到两个本地连接都有自已的网关,通过route print 查看路由表信息,如下:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.8 25 #本地连接的路由
0.0.0.0 0.0.0.0 192.168.2.1 192.168.2.205 30 #vpn连接的路由
......
Default Gateway: 192.168.1.1 #缺省网关
最后一行 192.168.1.1 #这是缺省的本地连接网关,需要将默认网关改为VPN的网关。方法如下:
将客户端PC"本地连接"的TC/IP属性中-高级-自动跃点计数改为手动,设为:30或大于30(这个数值根据你的实际值确定) !
(或者也可以将客户端PC"本地连接2"(tap32)的TC/IP属性中-高级-自动跃点计数改为手动,设为:25或小于25)
也就是说默认网关是根据较小的跃点数网关确定首选路由的!!
再查看route print ,路由表需要变成:
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.8 30
0.0.0.0 0.0.0.0 192.168.2.1 192.168.23.205 30
....
Default Gateway: 192.168.2.1
此时就应该可以通过vpn通道上外网了。
或者设置本地连接为静态IP,不设网关,手工添加本地路由,设置本地连接2(VPN)为自动获取IP、DNS,效果是一样的!
手工添加本地路由:route add 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 30
有关“跃点计数”知识的简介:
http://baike.baidu.com/view/1781753.htm?fr=ala0_1_1
http://winsvr.org/info/info.php?sessid=&infoid=61
至此openvpn共享密钥+桥接模式的配置完成!
多用户证书验证和text用户口令验证在openwrt下测试通过! 其他模式大家可以自行研究!!!
附上自已收集的OpenVPN 配置全集.pdf OpenVPN 配置全集.pdf (787.69 KB)