openwrt上建立openvpn

来源:互联网 发布:linux保存vi修改文件 编辑:程序博客网 时间:2024/06/07 21:46

安装相关的软件包

opkg update && opkg install openvpn openvpn-easy-rsa

ps: 可能会提示少一些内核模块而安装不上,我这里采用的是,将OPENVPN 直接编译进bin。

然后就是OpenVPN的设置了

ssh 连接到openwrt编辑/etc/config/openvpn,改为如下内容

config 'openvpn' 'lan'    option 'enable' '1'    option 'port' '1194'    option 'proto' 'udp'    option 'dev' 'tap'    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 'ifconfig_pool_persist' '/tmp/ipp.txt'    option 'keepalive' '10 120'    option 'comp_lzo' '1'    option 'persist_key' '1'    option 'persist_tun' '1'    option 'status' '/tmp/openvpn-status.log'    option 'verb' '3'    option 'server_bridge' '192.168.1.1 255.255.255.0 192.168.1.201 192.168.1.254'    list 'push' 'redirect-gateway'    list 'push' 'dhcp-option DNS 192.168.1.1'    list 'push' 'route-gateway 192.168.1.1'

然后用刚才安装的easy-rsa 生成密钥,编辑/etc/easy-rsa/vars 把下面这些东西改成自己的

export KEY_COUNTRY="CN"export KEY_PROVINCE="SC"export KEY_CITY="ChengDu"export KEY_ORG="CUIT"export KEY_EMAIL="email@email.com"export KEY_EMAIL=email@email.comexport KEY_CN=xxxxxexport KEY_NAME=xxxxxexport KEY_OU=xxxxxexport PKCS11_MODULE_PATH=xxxxxexport PKCS11_PIN=1234

生成证书依次执行

清空目录clean-all 、生成ca证书 build-ca 、生成dh密钥 build-dh 、服务器证书build-key-server server、客户端证书 build-key Huxos

后面的server ,Huxos 可以自己指定。

进入/etc/easy-rsa/keys/

将生成的ca.crt ca.key dh1024.pem server.key server.crt 复制到 /etc/openvpn/ 中。

cd /etc/easy-rsa/keys/cp ca.crt ca.key dh1024.pem server.key server.crt /etc/openvpn/

将生成的ca.crt dh1024.pem Huxos.key Huxos.crt 复制到客服端(可以使用scp等)

scp ca.crt dh1024.pem Huxos.key Huxos.crt huxos@192.168.1.180:./openvpn

启动OpenVPN服务器

/etc/init.d/openvpn start

设置网络

  1. openvpn启动成功之后就会启动一个叫做tap0的网卡

  2. lan的设置将生成的tap0加入到lan的网桥中

  3. 配置好防火墙

客服端的设置

新建文件 ****.ovpn 和刚才的密钥文件放在一起同一个文件夹,键入如下内容

clienttls-clientdev tapproto udpremote 10.145.17.142 1194 #路由器的IP 端口resolv-retry infinitenobindpersist-tunpersist-keyca ca.crtcert Huxos.crtkey Huxos.keydh dh1024.pemcomp-lzoverb 3##下面两行for WIN7#route-method exe#route-delay 2

Windows 上面安装好OpenVPN-gui 将这个文件夹啊放入安装目录的config 文件夹下面


更新: 使用路由方式的配置


OpenVPN 提供两种的方式一种是tap(网桥)模式,一种是tun(路由)模式

  1. 网桥模式工作在OSI 七层协议的第二层,将数据封装成MAC帧,产生的TAP虚拟网卡可以用来桥接

  2. 路由模式工作在OSI 七层协议的地三层,将数据封装成IP数据报

  3. 服务器差用哪种模式,相应的客服端同样也要采用相同的模式


配置OpenVPN服务端(其他都一样,只需要将/etc/config/openvpn修改为如下)


config 'openvpn' 'lan'        option 'enable' '1'        option 'port' '1194'        option 'proto' 'udp'        option 'dev' 'tun'        option 'ca' '/etc/easy-rsa/keys/ca.crt'        option 'cert' '/etc/easy-rsa/keys/server.crt'        option 'key' '/etc/easy-rsa/keys/server.key'        option 'dh' '/etc/easy-rsa/keys/dh1024.pem'        option 'ifconfig_pool_persist' '/tmp/ipp.txt'        option 'duplicate-cn' '1'        option 'keepalive' '10 120'        option 'comp_lzo' '1'        option 'persist_key' '1'        option 'persist_tun' '1'        option 'status' '/tmp/openvpn-status.log'        option 'verb' '3'        option 'server' '192.168.10.0 255.255.255.0'        list 'push' 'redirect-gateway'        list 'push' 'dhcp-option DNS 192.168.1.1'        list 'push' 'dhcp-option DNS 8.8.8.8'        list 'push' 'dhcp-option DOMAIN lan'    list 'push' 'route-gateway 192.168.1.1'


路由模式稍微复杂一点要使用iptables实现转发(修改/etc/firewall.user,加入如下的内容)



iptables -t nat -A prerouting_wan -p udp --dport 1194 -j ACCEPT iptables -A input_wan -p udp --dport 1194 -j ACCEPT iptables -I INPUT -i tun+ -j ACCEPT iptables -I FORWARD -i tun+ -j ACCEPT iptables -I OUTPUT -o tun+ -j ACCEPT iptables -I FORWARD -o tun+ -j ACCEPT

客户端的配置文件相应的把dev修改为tun


client tls-client dev tun proto udp

remote 10.145.17.142 1194 #路由器的IP 端口resolv-retry infinitenobindpersist-tunpersist-keyca ca.crtcert Huxos.crtkey Huxos.keydh dh1024.pemcomp-lzoverb 3##下面两行for WIN7#route-method exe#route-delay 2

必要的証書都完成後再來修改OpenVPN主要設定

vi /etc/config/openvpn

再按【 i 】進行修改
完成後再按【 Esc 】之後輸入【 :wq 】作儲存和退出

===============================================================
整個教學都完成了
現在只要輸入如下便可以正常使用Client連線到OpenVPN了

/etc/init.d/network restart/etc/init.d/openvpn restart/etc/init.d/openvpn enable

如果你要使用Xoom連線可以參考:
Xoom安裝OpenVPN客戶端(MZ601)

以下部分為和Windows 7連線設定
大家先下載openvpn-2.0.9-gui-1.0.3-install.exe

未完…真的很累….有空再寫… {:1_04:}
或者大家可以先對照如下作修改
再儲存為client.ovpn
放到C:\Program Files\OpenVPN\config
便可使用Windows 7和OpenWRT連線了

clientdev tap;dev-node openvpnproto udpremote www.yourdomain.com 1194  你的IP地址:1194 ;remote-randomresolv-retry infinitenobind;user nobody;group nobodypersist-keypersist-tun;http-proxy-retry # retry on connection failures;http-proxy [proxy server] [proxy port #];mute-replay-warningsca C:\\ca.crtcert C:\\client.crtkey C:\\client.keydh C:\\dh1024.pemns-cert-type server;tls-auth ta.key 1;cipher xcomp-lzoverb 3;mute 20redirect-gateway def1  /*如果server端沒設定,刪掉後可以不用Server gateway
启用虚拟网卡tap0并加入br-lan网桥。 这个是关键地方,这种方法是openwrt推荐的方法,也是网络设置最简便的。
原理是将虚拟网卡tap0接口加入已经建立的br-lan网桥中,所有经tap0接入的连接全部视同lan接入,无需重新配置nat、forward等。
root@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桥中了。
root@OpenWrt# 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配置:如图:
 

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下测试通过! 其他模式大家可以自行研究!!!
正确配置config 'openvpn' 'lan'option 'enable' '1'option 'port' '1194'option 'proto' 'udp'option 'dev' 'tap'option 'ca' '/etc/easy-rsa/keys/ca.crt'option 'cert' '/etc/easy-rsa/keys/server.crt'option 'key' '/etc/easy-rsa/keys/server.key'option 'dh' '/etc/easy-rsa/keys/dh1024.pem'option 'ifconfig_pool_persist' '/tmp/ipp.txt'option 'keepalive' '10 120'option 'comp_lzo' '1'option 'persist_key' '1'option 'persist_tun' '1'option 'status' '/tmp/openvpn-status.log'option 'verb' '3'        option 'server_bridge' '192.168.1.5 255.255.255.0 192.168.1.201 192.168.1.254'list 'push' 'redirect-gateway'list 'push' 'dhcp-option DNS 192.168.1.1'        list 'push' 'route-gateway 192.168.1.1'
或者换成
option 'server' '10.8.0.0 255.255.255.0'
client.ovpn文件
clienttls-clientdev tapproto udpremote 192.168.1.5 1194 #路由器的IP 端口resolv-retry infinitenobindpersist-tunpersist-key ca ca.crtcert client.crt key client.key dh dh1024.pemcomp-lzo verb 3 #route-method exe#route-delay 2
0 0
原创粉丝点击