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,然后在一级路由中添加端口映射,如下图

openvpn.jpg

    将外部端口设置为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文件

 

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  

client.ovpn文件

 

#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

 

 

以下是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部件,使用方法详见附件!
vpn1.jpg

2、 启用虚拟网卡tap0并加入br-lan网桥。 这个是关键地方,这种方法是openwrt推荐的方法,也是网络设置最简便的。
原理是将虚拟网卡tap0接口加入已经建立的br-lan网桥中,所有经tap0接入的连接全部视同lan接入,无需重新配置nat、forward等。
[email protected]OpenWrt# brctl show                ##显示现有网桥情况
  1. bridge name        bridge id                STP enabled        interfaces
  2. br-lan                8000.007404037df3        no                eth1.0
  3.                                                                  wlan0
复制代码
3、建立网桥启动脚本:/etc/openvpn/startupscript,内容如下:
  1. #!/bin/sh
  2. #/etc/openvpn/startupscript
  3. # OpenVPN Bridge Config File
  4. # Creates TAP devices for use by OpenVPN and bridges them into OpenWRT Bridge
  5. # Taken from http://openvpn.net/bridge.html
  6. # Define Bridge Interface
  7. # Preexisting on OpenWRT
  8. br="br-lan"
  9. # Define list of TAP interfaces to be bridged,
  10. # for example tap="tap0 tap1 tap2".
  11. tap="tap0"
  12. case "$1" in
  13.         up)
  14.                 # Make sure module is loaded
  15.                 insmod tun
  16.                 # Build tap devices
  17.                 for t in $tap; do
  18.                     openvpn --mktun --dev $t
  19.                 done
  20.                 # Add TAP interfaces to OpenWRT bridge
  21.                 for t in $tap; do
  22.                     brctl addif $br $t
  23.                 done
  24.                 #Configure bridged interfaces
  25.                 for t in $tap; do
  26.                     ifconfig $t 0.0.0.0 promisc up
  27.                 done
  28.         ;;
  29.         down)
  30.                 for t in $tap; do
  31.                     ifconfig $t 0.0.0.0 down
  32.                 done
  33.                 for t in $tap; do
  34.                     brctl delif $br $t
  35.                 done
  36.                 for t in $tap; do
  37.                     openvpn --rmtun --dev $t
  38.                 done
  39.                 rmmod tun
  40.         ;;
  41.          *)
  42.                 echo "$0 {up|down}"
  43.         ;;
  44. esac
复制代码
修改脚本执行权限:chmod +x /etc/openvpn/startupscript
然后执行一次:
/etc/openvpn/startupscript  up

就可以将tap0加入到br-lan桥中了。
[email protected]# brctl show      ###显示现有网桥情况,多了个tap0 .
  1. bridge name        bridge id                STP enabled        interfaces
  2. br-lan                8000.007404037df3           no                eth1.0
  3.                                                                  wlan0
  4.                                                                  tap0
复制代码
每次重启路由后,你需要重新执行一次脚本才能正常启用openvpn,你也可以修改一下将启动脚本放到/etc/init.d/,增加/etc/rc.d启动项,做到开机自动启动。更简单的办法是:将/etc/openvpn/startupscript  up 加入到/etc/rc.local中开机自动启动网桥部分!!

ok,openvpn的网络环境基本完成。
4、生成共享密钥
使用如下命令生成静态密钥:
openvpn --genkey --secret static.key
openvpn的所有配置文件都在etc/openvpn这个目录下!生成的static.key位于/etc/openvpn,你可以将这个文件复制到客户端使用。静态密钥文件由ascii组成,就像下面这样:
  1. -----BEGIN OpenVPN Static key V1-----
  2. e5e4d6af39289d53
  3. 171ecc237a8f996a
  4. 97743d146661405e
  5. c724d5913c550a0c
  6. 30a48e52dfbeceb6
  7. e2e7bd4a8357df78
  8. 4609fe35bbe99c32
  9. bdf974952ade8fb9
  10. 71c204aaf4f256ba
  11. eeda7aed4822ff98
  12. fd66da2efa9bf8c5
  13. e70996353e0f96a9
  14. c94c9f9afb17637b
  15. 283da25cc99b37bf
  16. 6f7e15b38aedc3e8
  17. e6xxxxxxxxxxxxx63
  18. -----END OpenVPN Static key V1-----
复制代码
5、openvpn服务端配置
/etc/openvpn/my-vpn.conf
  1. dev tap0
  2. port 443
  3. proto tcp-server
  4. comp-lzo yes
  5. keepalive 10 60
  6. verb 3
  7. secret /etc/openvpn/static.key
  8. #ca /etc/openvpn/ca.crt
  9. #dh /etc/openvpn/dh1024.pem
  10. #cert /etc/openvpn/server.crt
  11. #key /etc/openvpn/server.key
  12. #status-version 2
  13. log /etc/openvpn/openvpn0.log
  14. status /etc/openvpn/server.status
  15. #tls-auth /etc/openvpn/ta.key 0
  16. # Custom Configuration
  17. #auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
  18. #client-cert-not-required
  19. #username-as-common-name
复制代码
6、启动openvpn服务 (启动前记得将防火墙的wan相应端口打开,这里是443 )
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配置:如图:
11.jpg

5-2-2、通过luci修改custom_config、sample_server或vpn0的配置相关内容如下( 或者直接修改/etc/config/openvpn文件内容):
  1. config 'openvpn' 'custom_config'
  2.         option 'config' '/etc/openvpn/my-vpn.conf'      #自定义调用前面的my-vpn.conf ,暂不用此配置      

  3. config 'openvpn' 'sample_server'                           
  4.         option 'port' '443'
  5.         option 'dev' 'tap0'
  6.         option 'ca' '/etc/openvpn/ca.crt'
  7.         option 'cert' '/etc/openvpn/server.crt'
  8.         option 'key' '/etc/openvpn/server.key'
  9.         option 'dh' '/etc/openvpn/dh1024.pem'
  10.         option 'keepalive' '10 120'
  11.         option 'comp_lzo' '1'
  12.         option 'persist_key' '1'
  13.         option 'persist_tun' '1'
  14.         option 'log' '/etc/openvpn/openvpn.log'
  15.         option 'verb' '3'
  16.         option 'enable' '0'                                                #0.不启用
  17.         option 'proto' 'tcp'
  18.         option 'client_to_client' '1'
  19.         option 'dev_type' 'tap'

  20. config 'openvpn' 'sample_client'
  21.         option 'enable' '0'                                                #0.不启用
  22.            option 'client' '1'
  23.         option 'dev' 'tun'
  24.         option 'proto' 'udp'
  25.         list 'remote' 'my_server_1 1194'
  26.         option 'resolv_retry' 'infinite'
  27.         option 'nobind' '1'
  28.         option 'persist_key' '1'
  29.         option 'persist_tun' '1'
  30.         option 'ca' '/etc/openvpn/ca.crt'
  31.         option 'cert' '/etc/openvpn/client.crt'
  32.         option 'key' '/etc/openvpn/client.key'
  33.         option 'comp_lzo' '1'
  34.         option 'verb' '3'

  35. config 'openvpn' 'vpn0'
  36.        option 'enable' '1'                                # 1.启用
  37.        option 'port' '443'
  38.         option 'dev' 'tap0'
  39.         option 'comp_lzo' '1'
  40.         option 'secret' '/etc/openvpn/static.key'
  41.         option 'verb' '3'
  42.         option 'dev_type' 'tap'
  43.         option 'proto' 'tcp-server'
  44.        option 'persist_key' '1'
  45.         option 'persist_tun' '1'
  46.         option 'log' '/etc/openvpn/openvpn.log'
  47.         option 'keepalive' '10 60'
复制代码
5-2-3、OK,openvpn服务配置完成,重新启动路由器opevpn服务就会自动启动,或者手工启动vpn:
/etc/init.d/openvpn start
用ps命令可以看到openvpn进程了,说明成功启动!
  1. 3790 root      3000 S    /usr/sbin/openvpn --syslog openvpn(vpn0) --writepid /
  2. 3791 root      1308 R    ps
复制代码
7、客户端的配置
win版openvpn客户端配置文件: /programs/openvpn/config/client.ovpn
  1. #tls-client
  2. dev tap0
  3. secret key.txt      ##这是前面生成的共享密钥文件,你可以复制到客户端自行改名
  4. ;http-proxy-retry
  5. ;http-proxy xxx.xxx.xxx.xx 80 authfile ##代理服务器地址和端口+自动验证代理用户口令文件
  6. proto tcp-client
  7. remote 192.168.3.1 443                     ##路由器的IP地址(动态域名)和端口,
  8. keepalive 10 60
  9. verb 3
  10. float
  11. #ca ca.crt
  12. #cert cfan.crt
  13. #key cfan.key
  14. #tls-auth ta.key 1
  15. #ns-cert-type server
  16. comp-lzo
  17. #auth-user-pass
复制代码
使用这个配置文件启动openvpn客户端连接,就可以在任何地方上网连上openvpn,并获得内网lan网段的IP,自由访问内网资源!!!!
至于这么复杂架设个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)
  • No Comments Yet

添加新评论 »

captcha