方案背景:
公司办公网络使用长城宽带上网有一段时间了,有4个固定IP(2个电信,2个网通),链路不太稳定,经常有问题,因此考虑取消长城宽带,采用原来的adsl上网。但是有个问题,因为公司内网有几台服务器,需要通过固定IP接受外网用户发送的数据,因此如果没有公网IP,而ADSL获取的IP会变化,那么内网服务器接受外面用户的数据就会受到影响,通过采用openvpn很好的解决了这个问题。这个前提是你在机房的服务器有固定IP。
应用场景
公司在托管机房有公网IP,在公司内部采用ADSL上网,又需要接受外网用户发送的数据,那么就可以在托管机房有公网IP的服务器部署openvpn,然后内网找一台服务器拨上去获取IP后,通过iptables的端口转发2次就可以完美解决公司网络没有公网IP的问题。
详细方案
下面就来详细讲述如何用openvpn完美的解决公司网络没有公网IP的解决方案!
一、 需求
在没有固定公网IP的情况下,借助托管机房的固定公网IP,实现发布内网服务器的端口给外网用户调用,具体环境如下面网络图中所示,需要把内网服务器192.168.100.113的708端口借助托管机房的固定IP发布给外网用户调用
二、 网络图
三、 openvpn服务器的安装配置
1. openvpn服务器端的环境
Openvpn version: 2.2.2(最新版本)
2. openvpn服务器端软件的安装
Ø 下载软件包
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
wget http://swupdate.openvpn.org/community/releases/openvpn-2.2.2.tar.gz
Ø 安装openssl
yum -y install openssl
记录下openssl的版本号,一会有用,我这里安装的openssl-0.9.8e-20.el5.x86_64版本
Ø 安装lzo
Ø 安装openvpn
cd openvpn-2.2.2
./configure --prefix=/usr/local/openvpn --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib \
--with-ssl-headers=/usr/local/include/openssl --with-ssl-lib=/usr/local/lib
make && make install
3. 制作openvpn证书key
Ø 初始话PKI
生成key变量可以采用export或者需改配置文件的形式,这里我只说采用export命令的形式!代码如下:
cd openvpn-2.2.2/easy-rsa/2.0 #注意这个路径和以前的版本不太一样
cp openssl-0.9.8.cnf openssl.cnf #这里有三个版本的openssl的文件供你选择,这里需要选择前面我们安装的openssl版本
export KEY_CONFIG=$D/openssl.cnf #设置openssl文件的位置
export KEY_DIR=$D/keys #设置生成key的保存路径
export KEY_SIZE=1024 #设置生成key的加密位数
export KEY_COUNTRY=CN #设置国家
export KEY_PROVINCE=GD #设置省
export KEY_CITY=SZ #设置城市
export KEY_ORG="futuotec" #设置组织
export KEY_EMAIL=monitor@staff.tuge.com #设置邮箱
./clean-all #这个命令执行完成以后会创建前面设置的key保存路径
Ø 生成ca证书和私钥
./build-ca #执行这个命令以后按照提示操作就可以了!示例如下:
Country Name (2 letter code) [CN]:
State or Province Name (full name) [GD]:
Locality Name (eg, city) [SZ]:
Organization Name (eg, company) [futuotec]:
Organizational Unit Name (eg, section) []:futuotec
Common Name (eg, your name or your server's hostname) []:server
Email Address [monitor@staff.tuge.com]:
Ø 生成server端证书和私钥
./build-key-server server #执行这个命令以后按照提示操作就可以了!示例如下
Country Name (2 letter code) [CN]:
State or Province Name (full name) [GD]:
Locality Name (eg, city) [SZ]:
Organization Name (eg, company) [futuotec]:
Organizational Unit Name (eg, section) []:futuotec
Common Name (eg, your name or your server's hostname) []:server
Email Address [monitor@staff.tuge.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:test111
An optional company name []:futuotec
Ø 生成客户端证书和私钥
./build-key client1 #client1为客户端的登录名,按照提示操作,示例如下,可重复次操作建多个不同的登录名
Country Name (2 letter code) [CN]:
State or Province Name (full name) [GD]:
Locality Name (eg, city) [SZ]:
Organization Name (eg, company) [futuotec]:
Organizational Unit Name (eg, section) []:futuotec
Common Name (eg, your name or your server's hostname) []:client1 #重要: 每个不同的 client 生成的证书, 名字必须不同.
Email Address [monitor@staff.tuge.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:test111
An optional company name []:futuotec
Ø 打包证书和私钥
./build-dh #通过这个命令创建Diffie Hellman参数
tar zcvf key.tar.gz keys
将生成的key.tar.gz下载备用
4. openvpn服务器端配置
将前面生成的如下key文件和证书文件拷到/usr/local/openvpn/keys目录下:
ca.crt、server.crt、server.key、dh1024.pem
vim /usr/local/openvpn/etc/server.conf 添加如下内容
client-config-dir /usr/local/openvpn/etc/ccd #介绍一下这个选项,这个选项是为制定的登录名使用单独的配置,比如制定固定的IP,本文就用到了这个配置,在这个目录下,创建一个用户名文件,然后写入你的需求配置,稍后会介绍
port 1194
proto udp
dev tun
ca /usr/local/openvpn/keys/ca.crt
cert /usr/local/openvpn/keys/server.crt
key /usr/local/openvpn/keys/server.key
dh /usr/local/openvpn/keys/dh1024.pem
server 172.16.100.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 172.16.88.0 255.255.255.0"
push "route 172.16.100.0 255.255.255.0"
push "dhcp-option DNS 172.16.88.10"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 4
vim /usr/local/openvpn/etc/ccd/client1 添加如下内容:
可能有人会想为什么要制定两个IP,这是因为openvpn只支持255.255.255.252 的子网,而且252的子网只有两个IP,一个分配给客户端,一个留给服务器用.因此只能ccd目录下面的文件内容只能是:
ifconfig-push 172.16.100.1 172.16.100.2
ifconfig-push 172.16.100.5 172.16.100.6 …..
如果配置错误,会报如下错误:
Tue Jan 10 18:02:33 2012 us=197724 read UDPv4 [ECONNREFUSED]: Connection refused (code=111)
启动openvpn服务端:
/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/etc/server.conf > /dev/null 2>&1 &
然后将该命令写入到/etc/rc.local中
查看是否启动成功:
netstat -lnp | grep openvpn
udp 0 0 58.33.123.75:1194 0.0.0.0:* 11545/openvpn
四、 openvpn客户端的安装配置
1. openvpn客户端的环境
客户端的环境和服务器端的环境一样
OS: Centos 5.5 64bit 2.6.18
Lzo version: 2.0.6(最新版本)
Openvpn version: 2.2.2(最新版本)
2. openvpn客户端的安装
安装也和服务器的一样,这里就不赘述
3. openvpn客户端的配置
mkdir /usr/local/openvpn/etc
mkdir /usr/local/openvpn/keys/
将需要的前面打包的相关key文件放到keys目录下,比如client1用户需要copy到客户端的文件如下:
ca.crt
ca.key
client1.crt
client1.csr
client1.key
vim /usr/local/openvpn/etc/client.conf 添加如下内容:
client
dev tun
proto udp
persist-key
persist-tun
ca /usr/local/openvpn/keys/ca.crt
cert /usr/local/openvpn/keys/client2.crt
key /usr/local/openvpn/keys/client2.key
ns-cert-type server
comp-lzo
verb 4
启动客户端:
/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/etc/client.conf > /dev/null 2>&1 &
并将该命令写入/etc/rc.local
检查是否链接成功,已经分配的IP是否是制定的IP
ifconfig显示如下内容:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.16.100.9 P-t-P:172.16.100.10 Mask:255.255.255.255
五、 openvpn服务器端iptables的设置
iptables -t nat -A PREROUTING -d 58.33.123.75 -p tcp -m tcp --dport 708 -j DNAT --to-destination 172.16.100.9:708
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
iptables -A INPUT -s 172.16.100.0/255.255.255.0 -j ACCEPT
说明:将外面请求机房中58.33.123.75端口708的请求都发往公司内网的vpn客户端,打开openvpn的1194端口,允许网段的访问!
六、 openvpn客户端iptables的设置
iptables -t nat -A PREROUTING -s 58.33.123.75 -p tcp -m tcp --dport 708 -j DNAT --to-destination 192.168.100.113:708
iptables -t nat -A POSTROUTING -j MASQUERADE
说明:将源是来自58.33.123.75并且目标端口为708的请就转发到内网的192.168.100.113的708端口,这就完成了整个转发过程
七、 测试端口调用是否OK
因为发布的tcp的端口,因此可以采用telnet的方式来调用,在外网找台机器,执行如下命令看看是否OK!
telnet 58.33.123.75 708
如果不能连接,就需要检查vpn是否OK。Ping是个很好的工具,以及检查防火墙规则
总结:
对于我们搞IT的来说,其实解决问题的方法很多,需要灵活的来运用各种技术。这样能给你的企业节省不少成本,而且能让你的工作更有创造性。因此我们在日常工作中应该充分发挥我们的想象力,灵活应用我们的各种技术,你会发现其实技术的道路还可以更宽、更精彩!
from: http://blog.chinaunix.net/uid-20639775-id-3123671.html
相关推荐
搭建服务器+客户端阔以内网穿透
IP领域技术发展带有明显的技术驱动的特点,新技术层出不穷:基于IP网络的快速转发技术MPLS,基于IP网络的业务组网技术MPLSVPN,基于IP网络的QoS技术IntServ/Diffserv,基于IP网络的流量工程和保护技术 MPLSTE/...
本次课程选取的场景是公网IPv4 over SRv6 BE。SRv6有两种模式,一种是SRv6 BE,BE就是Best Effort,尽力而为的意思。相对来说,BE是没有流量工程能力的。另外一种模式是SRv6 TE Policy,在后面的课程再讲。 主要内容...
网络系统管理赛项软件包(服务模块软件包、普通PC软件包、无线地勘系统等)
Quidway金融网络MPLSvpn解决方案归纳.pdf
某企业SSL_VPN深信服项目解决方案.doc
越来越多的业务通过IP网络承载已经成为不可阻挡的发展趋势,运营商运营的关键NGN、3G、IPTV业务,企业VPN互连、视频会议/ 监控、大客户专线/IDC等业务,对IP网络提出了更高的要求。通过实施网络组织、网络自愈和保护...
通过精心设计、部署、网络验收测试以及多种业务加载运行,充分表明IP/MPLS多业务融合网络能够实现承载包括企业VPN互联、软交换、3G、IPTV、视频会议、视频监控、高质量大客户互联网专线接入和高质量IDC等有QoS保证...
系统集成已经成为优化建筑智能化系统的必要手段,智能大厦的发展趋势之一就是是IP网络化。以IP网络技术为基础的系统集成技术,造就了目前两大趋势: IBMS(Integrated Intelligent Building Management System):...
日常使用电脑的同时又些朋友可能会遇到正上网或者刚开启电脑的时候提示网络电缆被拔出,这样的现象使人非常厌恶,一般出现这样的现象不是电脑网络连不上就是网络老是中断,使用户无法进行正常网络应用,那么如何解决这样...
它表现在:原来PBX所具有的电话管理功能它都有,PBX没有的功能更可以扩展,如:NAT,LAN交换,VPN,防火墙;IP PBX能提供丰富的接口;可以通过WEB方式方便管理;可能具有网守功能是它的一大亮点,使企业VoIP系统的...
同一个IP地址,在windows上能用,但是在linux下不能用,原因是,如何解决.zip
无服务器有效地减少了企业所需的额外带宽,并且企业无需维护额外的硬件,也无需申请额外的固定公网地址,甚至不需要更改任何企业网络配置;P2P 特性使得企业内部可以通过BizVNN 直接传输海量的数据,这充分利用了...
应用控制网关有SecPath ACG盒式设备和SecBlade ACG插卡两种产品形态,ACG可针对P2P/IM、网络游戏、炒股、非法网站访问等行为,进行精细化识别和控制,有效解决带宽滥用、访问非法网站感染病毒等问题;安全管理平台有...
与原版open-build-master相比,我做了稍稍修改,已经包含Open虚拟专网2.5源代码和依赖项源代码,需要VS2019、ActivePerl、WDK10,可以直接按照我写的教程进行编译,100%可编译。
如其名,可以改变本机ip,可以借此浏览一些教育网,或对ip段有要求的网站
现在公司的园区网络要进行规划和实施,现有条件如下 :公司已租借了一个公网的ip地址为222.206.160.1,和isp提供的一个公网dns服务器的 ip为222.206.160.2园区网络和分支机构使用192.168.1.0网络,并进行必要的子网...
根据本人运维经验,结合openVPN社区相关案例,针对TAP-Windows-adapter安装失败“an error occured installing the TAP device driver”错误提示,提出五种解决方案
SIEMENS自动化控制系统于VPN网络技术的完美结合(共11张PPT).pptx
TCP-IP详解(共三卷),高清文档