OpenVPN 详细配置
一、服务器环境及目的
?
服务器两块网卡,一块连接外网,一块连接内网外网IP: X X X X办公内网IP:172.16.1.0/24
?
目的:
通过VPN在Internet环境下接入办公内网,可以访问内网指定段内的计算机,并且客户端能通过VPN通道访问Internet
?
二、服务端安装过程?
1.安装openvpn
?
sudo apt-get install openvpn
?
2.设置认证机构,产生证书
在Ubuntu中大致这样操作,将目录 /usr/share/doc/openvpn/examples/easy-rsa/2.0 复制的你的HOME目录(这个目录包含了一系列很方便的脚本),修改vars使其符合你的实际情况(国家、省份、城市、公司、机构、邮件地址),然后运行
代码:
?
source ./vars./clean-all./build-ca./build-key-server <servername>./build-key <clientname>./build-dh
?
3.注意:
这只是第一次产生证书的正确操作,其中 build-ca 创建根证书,若你没有清除全部VPN Server/Client的打算,你不应该再次运行此命令;
创建的全部证书及私钥都在当前目录的 keys 下面,而命令 clean-all 将清除 keys 下面全部内容,因此 cliean-all 只在 build-ca 前运行一次。
随后添加 Server 证书或 Client 证书只需运行(建议单独的客户端配置单独的证书)
代码:
?
./vars./build-key-server <servername>or./build-key <clientname>
?
4.配置Server端
从示例中解压 server.conf
代码:
?
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/sudo gzip -d /etc/openvpn/server.conf.gz
?
将相关证书、私匙拷贝的 /etc/openvpn
?
ca.crtserver.crtserver.keydh1024.pem
?
5.修改 server.conf
关键一:取消注释 push "route a.b.c.d 255.255.255.0",并将地址和掩码替换为办公网络的地址和掩码
目的是为客户端加一条路由,这样客户端才有可能访问到办公网络中出VPN Server之外的其它主机
关键二:取消注释 push "dhcp-option DNS a.b.c.d" 和 push "dhcp-option WINS a.b.c.d", 并将地址替换为实际的 DNS 和 WINS 服务器的地址
目的是客户端连接VPN后仍能访问 Internet,(若推过来的DNS不能解析外部域名,则即使客户端的路由配置正确,想通过域名访问Internet也不可能)
?
示例server.conf
?
port 443proto udpdev tunca ca.crtcert server.crtkey server.key dh dh1024.pemserver 192.168.42.0 255.255.255.0ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp" #增加172.16.1.0 IP断的路由 使VPN客户端能访问这个地址段(真正能访问还需要后面的设置)push "route 172.16.1.0 255.255.255.0"push "dhcp-option DNS 202.205.6.4"
#vpn客户端能否相互访问;client-to-client#注释掉此参数表示同一个客户端证书只能有一个连接,如果两个客户端使用同一个证书连接的话,#先连接的会自动断开;duplicate-cnkeepalive 10 120
comp-lzopersist-keypersist-tunstatus openvpn-status.loglog /var/log/openvpn.logverb 3
?
6.Server 端其它设置
配置服务器,允许包转发:
代码:
?
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
?
设置iptable转发规则 使访问目标为172.16.1.0段的请求都转发到eth0网卡,这是vpn服务器连接办公内网的网卡,这里很重要,不然的话VPN客户端还是不能访问办公内网
?
iptables -t nat -A POSTROUTING -d 172.16.1.0/24 -o eth0 -j MASQUERADE
?
设置iptable转发规则 使来源为vpn客户端的请求都转发到eth1网卡,这是vpn服务器连接Internet的网卡,这里很重要,不然的话VPN客户端还是不能通过VPN访问Internet
?
iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth1 -j MASQUERADE
?
通过修改/etc/rc.local,加入以下代码,使服务器重启后自动设置转发规则
?
echo 1 |tee /proc/sys/net/ipv4/ip_forwardiptables -t nat -A POSTROUTING -d 172.16.1.0/24 -o eth0 -j MASQUERADEiptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth1 -j MASQUERADEexit 0
?
三、客户端配置过程?
至此openvpn服务器端配置完毕, 客户端只需要将keys目录下生成的对应的ca.crt(公用) 专用client.crt和client.key, client.ovpn拷贝到客户端openvpn安装目录下的config目录,如果没有client.ovpn文件,直接新建一个,内容类似:
?
clientdev tunproto udp remote <serverip> 443resolv-retry infinitenobindpersist-keypersist-tunca ca.crtcert client.crtkey client.key comp-lzoverb 3
?
运行客户端连接试一下吧:)
?
?
?
?
10个步骤搭建功能强大的openvpn pam mysql服务器V1.1六月 1st, 2010?Posted in?VPN?|?359次浏览Author:gaojinbo?
Time:2010-6-1
ubuntu openvpn安装配置-user/password方式V1.1,使用pam_mysql方式验证用户密码,openvpn pam mysql
?
1.环境?
ubuntu 9.10??? amd64?
openvpn 2.1?
eth0??? 192.168.1.195(这个是openvpn server的地址,请更换为自己的公网ip)?
vpn网络??? 192.168.10.0/24(这个是openvpn连接后的虚拟私用ip网段,这个网段不能与物理网段相同)
?
?
2.启用ip转发?
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
?
?
3.防火墙的设置
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADEiptables -A INPUT -i tun0 -j ACCEPTiptables -A FORWARD -i tun0 -j ACCEPTiptables -A FORWARD -o tun0 -j ACCEPT
?
?
4.安装openvpn libpam_mysql并生成证书
apt-get install openvpn? libpam-mysql
cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa/2.0
source ./vars
./clean-all
./build-ca
./build-key-server server? #出现…Sign the certificate… 按 y
./build-dh
openvpn –genkey –secret ta.key
cp ta.key keys
生成文件都在keys目录下
?
?
5.添加openvpn的pam文件
vi /etc/pam.d/openvpn
auth sufficient? pam_mysql.so? user=openvpn passwd=openvpn \host=127.0.0.1 port=3306 db=vpn table=vpnuser usercolumn=name \passwdcolumn=password sqllog=0 crypt=2account required pam_mysql.so? user=openvpn passwd=openvpn \host=127.0.0.1 port=3306 db=vpn table=vpnuser usercolumn=name \passwdcolumn=password sqllog=0 crypt=2
说明:openvpn-auth-pam认证只能使用host=localhost或host=127.0.0.1
?
?
6.安装mysql-proxy
由于本机没有安装Mysql-server,也不能通过ip连接到无端的数据库,所以安装一个mysql-proxy来支持openvpn-auth-pam验证
apt-get install mysql-proxy
启动
/usr/sbin/mysql-proxy? –proxy-address=0.0.0.0:3306 –proxy-backend-addresses=192.168.1.12:3306? –proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua >/var/log/mysql-proxy.log &
?
?
7.配置数据库
以管理员身份登录数据库:
create database vpn;
GRANT ALL ON vpn.* TO openvpn@% IDENTIFIED BY ‘openvpn’;
flush privileges;
use vpn;
CREATE TABLE vpnuser (name char(20) NOT NULL,password char(128) default NULL,active int(10) NOT NULL DEFAULT 1,PRIMARY KEY (name));
insert into vpnuser (name,password) values(‘gaojinbo.com’,password(‘gaojinbo.com’));
说明:
创建openvpn用户,对vpn这个database有所有操作权限,密码为openvpn
active不为1,无权使用VPN
增加用户 用户名:gaojinbo.com 密码:gaojinbo.com
?
?
8.修改openvpn服务配置文件
vi /etc/openvpn/server.conf
port 1194proto udpdev tunca /etc/openvpn/ca.crtcert /etc/openvpn/server.crtkey /etc/openvpn/server.keydh /etc/openvpn/dh1024.pemserver 10.0.0.0 255.255.255.0ifconfig-pool-persist ipp.txt;push "redirect-gateway"push "route 192.168.1.0 255.255.255.0"push "route 192.168.1.9 255.255.255.255 net_gateway"push "dhcp-option DNS 202.96.128.166">keepalive 10 120tls-auth /etc/openvpn/ta.key 0 comp-lzo user nobodygroup nogrouppersist-keypersist-tun status?????? /var/www/openvpn-status.loglog-append? /var/log/openvpn.log plugin ./openvpn-auth-pam.so openvpn client-cert-not-requiredusername-as-common-nameclient-to-clientduplicate-cnauth-nocacheverb 3
到此服务器端配置完成!
?
?
9.openvpn客户端安装
windows下的openvpn客户端,到?http://openvpn.se/去下载,安装后在其安装目录的conf目录把服务器生
成的ca.crt、ta.key拷过来,之后建立client.ovpn文件
clientdev tunproto udp remote 192.168.1.195 1194resolv-retry infinite nobindpersist-keypersist-tun ca ca.crtauth-user-passns-cert-type server tls-auth ta.key 1comp-lzo verb 3
?
10.测试
在windows下通过openvpn gui建立到服务器的连接,登录的时候输入用户名密码gaojinbo.com
?
完成!
?
参考:http://dozview.com/blog/an-implementation-of-openvpn-system-based-on-userpass-authentication-bandwidth-control
?
http://hi.baidu.com/viccom/blog/item/7608fe4406ee6f5c510ffe07.html
?
?
1 楼 hqman 2012-05-20 export LD_PRELOAD=/lib/libpam.so.0