`
wuhuizhong
  • 浏览: 684423 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

Openvpn完美解决公司网络没有固定公网IP的问题

 
阅读更多

方案背景:

公司办公网络使用长城宽带上网有一段时间了,有4个固定IP2个电信,2个网通),链路不太稳定,经常有问题,因此考虑取消长城宽带,采用原来的adsl上网。但是有个问题,因为公司内网有几台服务器,需要通过固定IP接受外网用户发送的数据,因此如果没有公网IP,而ADSL获取的IP会变化,那么内网服务器接受外面用户的数据就会受到影响,通过采用openvpn很好的解决了这个问题。这个前提是你在机房的服务器有固定IP

 

应用场景

公司在托管机房有公网IP,在公司内部采用ADSL上网,又需要接受外网用户发送的数据,那么就可以在托管机房有公网IP的服务器部署openvpn,然后内网找一台服务器拨上去获取IP后,通过iptables的端口转发2次就可以完美解决公司网络没有公网IP的问题。

 

详细方案

下面就来详细讲述如何用openvpn完美的解决公司网络没有公网IP的解决方案!

一、   需求

在没有固定公网IP的情况下,借助托管机房的固定公网IP,实现发布内网服务器的端口给外网用户调用,具体环境如下面网络图中所示,需要把内网服务器192.168.100.113708端口借助托管机房的固定IP发布给外网用户调用

二、   网络图

三、   openvpn服务器的安装配置

1.       openvpn服务器端的环境

OS: Centos 5.5 64bit 2.6.18

Lzo version: 2.0.6(最新版本)

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

tar xzvf lzo-2.06.tar.gz

cd lzo-2.06

./configure

make && make check && make install

Ø  安装openvpn

tar xzvf openvpn-2.2.2.tar.gz

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 D=`pwd`                        #设置路径

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服务器端配置

mkdir /usr/local/openvpn/etc

mkdir /usr/local/openvpn/keys/

将前面生成的如下key文件和证书文件拷到/usr/local/openvpn/keys目录下:

ca.crtserver.crtserver.keydh1024.pem

vim /usr/local/openvpn/etc/server.conf 添加如下内容

local 58.33.123.75

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  添加如下内容:

ifconfig-push 172.16.100.9 172.16.100.10

可能有人会想为什么要制定两个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

remote 58.33.123.75 1194

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客户端,打开openvpn1194端口,允许网段的访问!

 

六、   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.113708端口,这就完成了整个转发过程

 

七、   测试端口调用是否OK

因为发布的tcp的端口,因此可以采用telnet的方式来调用,在外网找台机器,执行如下命令看看是否OK

telnet 58.33.123.75 708

如果不能连接,就需要检查vpn是否OKPing是个很好的工具,以及检查防火墙规则

 

总结:

对于我们搞IT的来说,其实解决问题的方法很多,需要灵活的来运用各种技术。这样能给你的企业节省不少成本,而且能让你的工作更有创造性。因此我们在日常工作中应该充分发挥我们的想象力,灵活应用我们的各种技术,你会发现其实技术的道路还可以更宽、更精彩!

 

 from: http://blog.chinaunix.net/uid-20639775-id-3123671.html

分享到:
评论

相关推荐

    利用公网IP搭建端口映射.zip

    2. **第三方内网穿透工具**:如 ngrok、花生壳、Frp 等,它们提供了一种云服务,可以在没有固定公网IP或者路由器无法配置端口映射的情况下,通过它们的服务器作为中转,实现内网服务对外的访问。这些工具通常提供...

    routeros端口映射内网无法访问自身公网IP问题(环回).doc

    本文将深入探讨如何解决RouterOS端口映射后,内网无法访问自身公网IP的问题,也被称为环回问题。 首先,我们来看端口映射的基本配置。在RouterOS中,这通常通过“ip -> Firewall -> Destination NAT”进行设置。在...

    基于openvpn的web管理系统,前后端分离设计。

    基于openvpn的web管理系统,前后端分离设计。

    易语言获取外网ip5种方法

    在IT领域,编程语言是实现各种功能的...同时,注意网络安全问题,如防止被恶意网站利用,确保获取IP的合法性。在易语言的环境中,熟练运用网络组件和各种库,结合实际需求,可以灵活实现各种网络功能,包括获取外网IP。

    openvpn的几种组网方式

    openvpn的几种组网方式

    IP新技术进阶系列 - 公网IPv4 over SRv6 BE深度解析

    本次课程选取的场景是公网IPv4 over SRv6 BE。SRv6有两种模式,一种是SRv6 BE,BE就是Best Effort,尽力而为的意思。相对来说,BE是没有流量工程能力的。另外一种模式是SRv6 TE Policy,在后面的课程再讲。 主要内容...

    openvpn 2.5.10版本

    openvpn 2.5.10版本,通过三板斧即可安装,证书生成需要的easy-rsa3.1.5版本也在压缩包里面。

    k8s上部署openvpn

    openvpn 服务端需要的文件,通过helm 3 部署

    网络系统管理赛项软件包

    它们负责网络中的命名解析、IP地址分配以及文件共享等功能。通过这些服务模块,管理员可以有效地管理和维护网络环境,确保服务的稳定性和安全性。 2. **普通PC软件包**:这部分可能包含常用的操作系统(如Windows或...

    谈IP化对传送及承载网演进理念带来的变化

    IP领域技术发展带有明显的技术驱动的特点,新技术层出不穷:基于IP网络的快速转发技术MPLS,基于IP网络的业务组网技术MPLSVPN,基于IP网络的QoS技术IntServ/Diffserv,基于IP网络的流量工程和保护技术 MPLSTE/...

    同一个IP地址,在windows上能用,但是在linux下不能用,原因是,如何解决.zip

    在Windows和Linux操作系统中,IP地址的使用和网络连接的管理方式有所不同,这可能是导致问题的原因。以下是一些相关的知识点: 1. **IP地址原理**:IP地址是互联网上的唯一标识,用于在网络中定位设备。它遵循TCP/...

    解决dubbo错误ip及ip乱入问题的方法

    Dubbo 错误 IP 及 IP 乱入问题解决方法 在 Dubbo 框架中,服务注册在 Zookeeper 中,但是注册的 IP 不是本地的 IP,这将导致 Consumer 无法找到 Provider,无法访问服务。今天,我们将分享解决 Dubbo 错误 IP 及 IP...

    最新路由换IP软件.软件是最新发布的路由换IP软件

    总的来说,"FuckRouter"作为一款最新的路由换IP软件,其轻量级设计和快速切换IP的特性为用户提供了便捷的网络解决方案。然而,选择和使用任何此类工具时,都需要综合考虑性能、安全性和合法性等因素。

    e语言-易语言IP自动更新

    在现代网络环境中,动态IP地址分配是一个常见的需求,尤其在企业网络中,为了节约有限的公网IP资源,通常会使用DHCP(Dynamic Host Configuration Protocol)服务来动态分配IP地址。IP自动更新程序能够帮助用户在IP...

    Quidway金融网络MPLSvpn解决方案归纳.pdf

    Quidway金融网络MPLSvpn解决方案归纳.pdf

    如何解决系统显示网络电缆被拔出的问题

    在日常使用电脑的过程中,有时会遇到“网络电缆被拔出”的问题,这无疑会给用户带来极大的不便,因为这意味着网络连接不稳定或...如果以上方法都无法解决问题,可能需要寻求专业技术人员的帮助,进行更深入的故障排查。

    XX公司网络安全解决方案.pdf

    这份解决方案旨在详细阐述公司当前的网络安全现状,识别存在的问题,并提出全面的解决方案,以确保公司的敏感信息、业务流程和终端设备得到有效保护。 1. 公司网络安全现状及需求 XX公司处理的文档和资料涉及到企业...

    某公司网络安全解决方案.doc

    SSL VPN可以解决公司当前OA系统无法支持公网和远程接入的问题,为员工提供安全的远程办公环境。 4. **文档安全管理系统**:此类系统旨在对公司的文档进行集中管理和控制,包括权限分配、版本控制和审计跟踪等功能,...

    某企业SSL_VPN深信服项目解决方案.doc

    某企业SSL_VPN深信服项目解决方案.doc

Global site tag (gtag.js) - Google Analytics