> Linux服务器 > VPN >

利用openvpn+linux快速建立企业VPN

原创:利用openvpn+linux快速建立企业VPN 
openvpn介绍http://openvpn.sourceforge.net/  ,不多说了. 
openvpn可工作于两种模式: 
一种是IP遂道路由模式,主要应用于点对点 
一种是基于以太网的遂道桥模式, 应用于点对多点,有多个分支机构 
本文介绍的配置实例是第一种 
拓扑图:   
局域网1:  OFFICE主机装redhat9.0 两块网卡 
eth1接公网 61.131.58.x , 
eth0接 内网192.168.1.56  
vpn 10.1.0.1 
 A主机 192.168.1.222 
局域网2: 
          HOME主机装redhat9.0两块网卡   
eth0 接公网 218.85.158.244 
eth1 接内网 192.168.0.235 
vpn 10.1.0.2 
          B主机 192.168.0.45 

环境:redhat9.0+lzo+openssl+openvpn 
openssl用来进行加密,lzo用来进行数据压缩 
下载地址   http://prdownloads.sourceforge.net/openvpn/openvpn-2.0_beta7.tar.gz 
           http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz 

先检查openssl是否已安装 
rpm –qa | grep openssl 
没有请先装openssl, openssl如何安装就不介绍了 
我将openvpn-2.0.beta7.tar.gz和lzo-1.08.tar.gz下载到/home 
#cd /home 
#tar zxvf lzo-1.08.tar.gz 
#cd  lzo-1.08. 
#./comfigure 
#make 
#make install 
#tar  zxvf openvpn-2.0_beta7.tar.gz 
#cd openvpn-2.0_beta7 
#./configure  --with-lzo-headers=/usr/local/include  --with-lzo-lib=/usr/local/lib 
#make 
#make install 
#mkdir  /etc/openvpn 
#cd /etc/openvpn 
#openvpn  --genkey  --secret  static.key 
将static.key从office主机复制到home主机的/etc/openvpn目录中 
office#scp  static.key  root@218.85.158.244:/etc/openvpn 
office#cd /home/openvpn-2.0_beta7/sample-config-files 
office#cp static-office.conf  /etc/openvpn 
office#cp firewall.sh  /etc/openvpn 
office#cp openvpn-startup.sh /etc/openvpn 
office#cp office.up /etc/openvpn 
修改static-office.conf ,firewall.sh ,openvpn-startup.sh,office.up 
我们先来看office主机的这几个配置文件 
static-office.conf配置如下: 
dev tun0 
remote 218.85.158.244  #为对端的公网ip 
ifconfig 10.1.0.1 10.1.0.2  #为本端和对端的vpn ip地址 
secret /etc/openvpn/static.key #密钥 
 port 5000 
 comp-lzo 
 ping 15 
 ping 15 
 ping-restart 45 
 ping-timer-rem 
 persist-tun 
 persist-key 
verb 3 

office主机的firewall.sh脚本如下: 
#!/bin/bash 
PRIVATE=192.168.1.0/24 
LOOP=127.0.0.1 

iptables -P OUTPUT DROP 
iptables -P INPUT DROP 
iptables -P FORWARD DROP 
iptables -F 

iptables -P OUTPUT ACCEPT 
iptables -P INPUT DROP 
iptables -P FORWARD DROP 

iptables -A INPUT -i eth1 -s $LOOP -j DROP 
iptables -A FORWARD -i eth1 -s $LOOP -j DROP 
iptables -A INPUT -i eth1 -d $LOOP -j DROP 
iptables -A FORWARD -i eth1 -d $LOOP -j DROP 

iptables -A FORWARD -p tcp --sport 137:139 -o eth1 -j DROP 
iptables -A FORWARD -p udp --sport 137:139 -o eth1 -j DROP 
iptables -A OUTPUT -p tcp --sport 137:139 -o eth1 -j DROP 
iptables -A OUTPUT -p udp --sport 137:139 -o eth1 -j DROP 

iptables -A FORWARD -s ! $PRIVATE -i eth0 -j DROP 


iptables -A INPUT -s $LOOP -j ACCEPT 
iptables -A INPUT -d $LOOP -j ACCEPT 

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT 

iptables -A INPUT -p tcp --dport http -j ACCEPT 
iptables -A INPUT -p tcp --dport ssh -j ACCEPT 

iptables -A INPUT -p udp --dport 5000 -j ACCEPT #openvpn默认使用udp 5000端口 

iptables -A INPUT -i tun+ -j ACCEPT 
iptables -A FORWARD -i tun+ -j ACCEPT #这两句很重要 
iptables -A INPUT -i tap+ -j ACCEPT 
iptables -A FORWARD -i tap+ -j ACCEPT 

iptables -A INPUT -i eth0 -j ACCEPT 
iptables -A FORWARD -i eth0 -j ACCEPT 

iptables -A OUTPUT -m state --state NEW -o eth1 -j ACCEPT 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A FORWARD -m state --state NEW -o eth1 -j ACCEPT 
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 

iptables -t nat -A POSTROUTING -s $PRIVATE -o eth1 -j MASQUERADE 

office.up脚本配置如下: 
#!/bin/bash 
route add -net  192.168.0.0 netmask 255.255.255.0 gw 10.1.0.2  #此处是对端的vpn ip地址 
openvpn-startup.sh脚本配置如下: 
#!/bin/bash 
dir=/etc/openvpn 
$dir/firewall.sh 
modprobe tun 
echo 1 >; /proc/sys/net/ipv4/ip_forward 
openvpn --config /etc/openvpn/static-office.conf 


home主机的4个配置文件 
static-home.conf如下 
dev tun0 
remote 61.131.58.194 
ifconfig 10.1.0.2 10.1.0.1 
secret /etc/openvpn/static.key 
 port 5000 
comp-lzo 
 ping 15 
 ping 15 
 ping-restart 45 
 ping-timer-rem 
 persist-tun 
 persist-key 
verb 3 

firewall.sh如下 
#!/bin/bash 
PRIVATE=192.168.0.0/24 
LOOP=127.0.0.1 
iptables -P OUTPUT DROP 
iptables -P INPUT DROP 
iptables -P FORWARD DROP 
iptables -F 

iptables -P OUTPUT ACCEPT 
iptables -P INPUT DROP 
iptables -P FORWARD DROP 

iptables -A INPUT -i eth0 -s $LOOP -j DROP 
iptables -A FORWARD -i eth0 -s $LOOP -j DROP 
iptables -A INPUT -i eth0 -d $LOOP -j DROP 
iptables -A FORWARD -i eth0 -d $LOOP -j DROP 

iptables -A FORWARD -p tcp --sport 137:139 -o eth0 -j DROP 
iptables -A FORWARD -p udp --sport 137:139 -o eth0 -j DROP 
iptables -A OUTPUT -p tcp --sport 137:139 -o eth0 -j DROP 
iptables -A OUTPUT -p udp --sport 137:139 -o eth0 -j DROP 

iptables -A FORWARD -s ! $PRIVATE -i eth1 -j DROP 

iptables -A INPUT -s $LOOP -j ACCEPT 
iptables -A INPUT -d $LOOP -j ACCEPT 

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT 

iptables -A INPUT -p tcp --dport http -j ACCEPT 
iptables -A INPUT -p tcp --dport ssh -j ACCEPT 

iptables -A INPUT -p udp --dport 5000 -j ACCEPT 

iptables -A INPUT -i tun+ -j ACCEPT 
iptables -A FORWARD -i tun+ -j ACCEPT 
iptables -A INPUT -i tap+ -j ACCEPT 
iptables -A FORWARD -i tap+ -j ACCEPT 

iptables -A INPUT -i eth1 -j ACCEPT 
iptables -A FORWARD -i eth1 -j ACCEPT 

iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT 
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 

iptables -t nat -A POSTROUTING -s $PRIVATE -o eth0 -j MASQUERADE 

home.up脚本如下: 
#!/bin/bash 
route add -net  192.168.1.0 netmask 255.255.255.0 gw 10.1.0.1 
openvpn-startup.sh脚本如下: 
#!/bin/bash 
dir=/etc/openvpn 
$dir/firewall.sh 
modprobe tun 
echo 1 >; /proc/sys/net/ipv4/ip_forward 
openvpn --config  /etc/openvpn/static-home.conf 
最后需要注意的是在office和home主机的/etc/modules.conf都要加上一行: 
alias char-major-10-200  tun 
在office主机上 
office#cd /etc/openvpn 
office#./openvpn-startup.sh 
office#./office.up 
在home主机上 
home#cd /etc/openvpn 
home#./openvpn-startup.sh 
home#./home.up 
A主机的default gateway设为192.168.1.56 
B主机的default gateway设为192.168.0.235 
在A主机上ping 192.168.0.45 
在home主机上用tcpdump监听 
home#tcpdump  -i  tun0 
应该有echo  request和echo reply 
不行的话,在home#ping 10.1.0.1看两个vpn网关是否通 
http://openvpn.sourceforge.net 上还有howto,faq,examples可参考



(责任编辑:IT)