当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

openwrt下的openvpn client实现 - 张岩的技术笔记

作者:小梦 来源: 网络 时间: 2024-08-26 阅读:

照说OpenWRT下实现openvpn的接入应该不难,但是经过实际动手的时候发现还是蛮多坑的。中国的OpenWRT社区也是杂乱无章,找些有用的东西实在太难。这两天看了不少openvpn和OpenWRT官方的英文文档,总算完美的实现了自己的需求。总结出来贡献给大家,少走弯路。

废话不多少进入正题

1、首先你要有一个运行有OpenWRT系统的路由器,配置不要太低,版本不要太旧。我现在的路由是14.09版本的,内核版本3.14,还是蛮新的。实在没有的可以联系我购买。我的是580Mhz的处理器,32MB ROM,128M RAM 的配置。

2、然后是安装

opkg updateopkg install openvpn-openssl

3、上传证书及密钥到路由器中,例如我上传的是/root/vpn/目录下。

4、配置UCI

我上网找了很多文章,配置方法都是直接编写配置文件然后使用openvpn --config name.conf的方式运行。虽然这种方法也能成功运行,但是不利于维护和管理,容易出问题。openwrt提供了统一的UCI配置接口,简单稳定还是建议采用UCI的方式。

vim /etc/config/openvpn#先删掉原有的配置,添加如下配置config openvpn name_config    #后面的name_config可以随便改    option enabled 1    #1为启用配置    option config /root/vpn/config    #引用配置文件config openvpn name1_config    #如果想要同时连多台服务器需要加上    option enabled 1    option config /root/vpn/config2    

5、编辑openvpn配置文件

vim /root/vpn/configclient    #客户端模式dev tun    #如果同时连多个请指定tun序号proto udp    #udp效率最高remote IP 1194    #服务端地址与端口resolv-retry infinitenobind    #不绑定固定端口#user nobody    #运行权限#group nogrouppersist-key    #key保持persist-tun    #接口保持ca ca.crtcert client.crtkey client.keytls-auth takey.key 1#auth-user-passcipher AES-256-CBC    #加密算法,与服务端一致comp-lzo    #启用压缩,需服务端支持verb 3    #日志级别mute 20    #合并相同日志mssfix 1400    #修改mss单元大小

6、测试是否能正常连接

logread -f    #openwrt下查看日志的方法。

新开一个窗口,或使用tmux新建一个面板。

/etc/init.d/openvpn restart

过十多秒后,ping对端的IP,如果能正常连通,说明已正常连通,如果不能请查日志。

这时候你会发现只能在路由器中ping得通,但是接在路由器中的其他电脑确不能,这是因为iptables还缺乏相应规则。需要添加:

iptables -I FORWARD -o tun0 -j ACCEPTiptables -t nat -I POSTROUTING -s 路由器网段 -d 对端网段 -o tun0 -j MASQUERADE

7、实现openvpn连接后自动添加iptables规则

创建shell脚本up.sh

#!/bin/shiptables -I FORWARD -o tun0 -j ACCEPTiptables -t nat -I POSTROUTING -s 路由器网段 -d 对端网段 -o tun0 -j MASQUERADE

还需要创建down.sh脚本,断开连接后删除相应的规则

#!/bin/shiptables -D FORWARD -o tun0 -j ACCEPTiptables -t nat -D POSTROUTING -s 192.168.11.0/24 -d 192.168.6.0/24 -o tun0 -j MASQUERADE

在openvpn配置文件中调用

vim /root/vpn/config#在文件结尾追加script-security 2up /root/vpn/up.shdown /root/vpn/down.sh

别忘了给脚本文件添加权限chmod +x up.sh,chmod +x down.sh

有一点需要注意:如果要添加up与down的脚本,前面的配置文件里就不能以nobody的身份运行的配置

8、使openvpn服务能开机自动运行

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

热点阅读

网友最爱