【背景】
办公网络使用ADSL上网,无固定IP。IDC机房有固定的IP。为了安全,服务器的公网ip只开放了应用的端口,基于这种情况,要访问机房,使用×××是一个较好方案。
但是给公司每个员工分一个IDC的***帐号是一个苦逼的活儿,因为每个客户机会遇到各种问题,***本来就不是一个非常稳定的东西。
那么就想到,只要哥哥使用一台linux服务器拨号,之后用这个机器做网关,做snat那么就能让办公网络访问线上服务器了^_^
这个方案已经做出来,实际运行一段时间了,经历了检验,今天成文,和大家分享。
【具体方案】
【各模块功能介绍】
1、IDC一台linux服务器当pptp ***的SERVER
2、一台linux服务充当pptp client,同时作为访问IDC机房的网关
3、办公网络一台路由器(员工电脑的默认网关)
4、×××守护脚工具(因为网络原因,×××就不是很稳定,意味着经常挂,那么需要一个监控工具,守护***的状态,一旦***挂了,就要再次启动)
网络结构如下
注意:实施环境为centos 6.5 64位服务器
【各模块具体安装配置说明】
第一、#####IDC一台linux服务器当pptp ***的SERVER#####
1.1具体请yum安装一下组件
ppp-2.4.5-5.el6.x86_64
pptpd-1.4.0-3.el6.x86_64
kernel-devel
1.2配置文件
# grep -v "#" /etc/pptpd.conf option /etc/ppp/options.pptpd logwtmp localip 10.1.1.101 #××× server的起始ip,注意不是××× server的真实的ip remoteip 10.1.253.1-254,10.1.0.254 #*** client分配的ip /etc/ppp/chap-secrets
# grep -v "#" /etc/ppp/options.pptpd name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 proxyarp lock nobsdcomp novj novjccomp nologfd ms-dns 8.8.8.8 ms-dns 8.8.4.4
# cat /etc/ppp/chap-secrets(注意这里格式比较严格,尤其是密码之后的*,密码之后只有一个tab或者空格,否则会导致windows连不上的报错609的报错,但是mac链接这个***都是好的)
# Secrets for authentication using CHAP # client server secret IP addresses user pptpd passwd *
1.3启动和维护
service pptpd restart service pptpd reload
1.4如果××× server开了防火墙,请加上
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 1723 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 47 -j ACCEPT -A INPUT -p gre -j ACCEPT
第二、#####办公网络一台linux服务器当pptp client的client,ip是192.168.1.252####
1、安装及配置
yum -y install pptp-setup
实际安装
(libpcap-1.4.0-1.20130826git2dbcaa1.el6.x86_64.rpm
ppp-2.4.5-5.el6.x86_64.rpm
pptp-1.7.2-8.1.el6.x86_64.rpm
pptp-setup-1.7.2-8.1.el6.x86_64.rpm)
初始化拨号
pptpsetup -create idc*** -server ***公网ip -username 用户名 -password 密码 -encrypt -start pptpsetup -create idc***114 -server ***公网ip -username 用户名 -password 密码 -encrypt -start#这里,可以多搭建一条备份链路idc***114,万一其中一条不行,可以做切换 route add -net 10.1.0.0/16 dev ppp0#添加路由,否则不通,因为服务器的网段是10.1.0.0/16 cp /usr/share/doc/ppp-2.4.5/scripts/pon /usr/sbin/ cp /usr/share/doc/ppp-2.4.5/scripts/poff /usr/sbin/ chmod +x /usr/sbin/pon /usr/sbin/poff pon idc***#开启××× route add -net 10.1.0.0/16 dev ppp0 poff idc***#关闭×××
2、防火墙配置,做SNAT
cat /etc/sysconfig/iptables *nat :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [1:92] :OUTPUT ACCEPT [1:92] -A POSTROUTING -d 10.1.0.0/16 -o ppp0 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] COMMIT
机器拨号好之后之后是这样的
第三、#####办公网络的路由器配置#####
本地网络是192.168.1.0/24,IDC的网络是10.1.0.0/16具体看下图
第四、××× client守护工具
具体可以参考这个脚本,本脚本已经经过实践检测
crontab里面
*/1 * * * * /scripts/***_monitor.sh >> /home/logs/***_monitor.log
#!/bin/bash # ***_monitor # by H2O # V1.0_2014.07.23 source /etc/profile function Judge***(){#判断×××是否存活,为了判断准确定,需要判断多次 FLAG=1 ping -c 1 10.1.1.1 -w 1 > /dev/null 2>&1 && FLAG=0 ping -c 1 10.1.1.2 -w 1 > /dev/null 2>&1 && FLAG=0 ping -c 1 10.1.1.103 -w 1> /dev/null 2>&1 && FLAG=0 return "$FLAG" } function Run_***(){ Now_Time=`date "+%F_%T"` echo "$Now_Time,*** is not running" poff idc*** ||poff idc*** || poff idc***#可能失败,多尝试几次 pon idc*** || pon idc*** || pon idc***#可能失败,多尝试几次 sleep 5#拨号之后,需要有一定时间才能出现设备ppp0,这里等5s,可以自己实践 route add -net 10.1.0.0/16 dev ppp0 || route add -net 10.1.0.0/16 dev ppp0 || route add -net 10.1.0.0/16 dev ppp0#路由可能添加失败,多尝试几次 route add -net 10.1.0.0/16 dev ppp0 echo "$Now_Time,*** runned" } function Run_***114(){ Now_Time=`date "+%F_%T"` echo "$Now_Time,*** is not running" poff idc*** ||poff idc*** || poff idc*** poff idc***114 ||poff idc***114 || poff idc***114 pon idc***114 || pon idc***114 || pon idc***114 sleep 6 route add -net 10.1.0.0/16 dev ppp0 || route add -net 10.1.0.0/16 dev ppp0 || route add -net 10.1.0.0/16 dev ppp0 route add -net 10.1.0.0/16 dev ppp0 echo "$Now_Time,***114 runned" } Judge*** Status=$? if [ "$Status" -eq 1 ];then Run_*** #run *** 之后,不一定能马上ping通 sleep 6 Judge*** Status=$? if [ "$Status" -eq 1 ];then Run_***114#第二次拨号就拨号114了 else Now_Time=`date "+%F_%T"` echo "$Now_Time,*** is running" exit 0 fi else Now_Time=`date "+%F_%T"` echo "$Now_Time,*** is running" exit 0 fi
转载于:https://blog.51cto.com/h2ofly/1529888
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109766.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...