×

实现两个机房内网连通

hqy hqy 发表于2019-05-08 10:51:25 浏览4790 评论0

抢沙发发表评论

链接:https://www.jianshu.com/p/4c44cff94040 

 这篇文章讲的是两个IDC机房之间内网互相打通,让A机房的所有服务器能连接到B机房所有服务器(至于B机房的所有服务器主动联通A机房的服务器,如果使用IP隧道的方式很好实现,路由策略配置好后就能互通了,而vpn的方式需要B机房一台服务器拨号到A机房的vpn服务器,然后再添加路由策略,当然,以上iptables做源地址转发都是少不了的)。以下文章,将分别用pptp和ip隧道两种方式来说明如何打通两个机房所有服务器的内网,我推荐IP隧道的方式,因为想做双机房互通比VPN要方便。

一、pptp方式

总体的思路:

①通过隧道让A机房隧道服务器能连接到B机房隧道服务器的内网IP。

②通过路由让A的隧道服务器能连通B机房所有服务器的内网。

③A机房的隧道服务器添加源地址转换策略。

④A机房的所有服务器添加网关,网关填写为A的隧道服务器内网地址。

具体步骤:

A机房:eth0(42.62.80.0/28)eth1(192.168.1.0/24)

B机房:eth0(58.215.41.0/28)eth1(192.168.1.0/24)

A机房隧道服务器IP:42.62.80.45192.168.1.45

B机房隧道服务器IP:58.215.41.148192.168.1.148

1、隧道服务器部署

pptp或者openvpn,部署VPN做隧道服务器,本文不具体讲VPN服务器和客户端拨号的部署方式。我vpn拨号成功后客户端会分配到一个192.168.1.21的IP。

2、通过路由让A的隧道服务器能连通B机房所有服务器的内网

pptp的方式,我只实现了A的隧道服务器能连通B机房所有服务器的内网,理论上反过来也是能做到的,不过我没这个需求就没测试。

下面是路由策略,(理论基础就是到目的IP地址通过网关设备(ppp0))

#!/bin/bash

IPList="

192.168.1.149

192.168.1.150

192.168.1.151

192.168.1.152

192.168.1.153

"

for i in $IPList

do

/sbin/routeadd $i dev ppp0

done

路由添加后可以测试从192.168.1.45上测试到以上脚本中内网IP列表的连通性。

3、pptp服务器添加源地址转换策略

#!/bin/bash

#auth dongbo

#LAN="192.168.15.0/24"

LAN="192.168.1.0/24"

#空格分隔IP列表

office="210.22.151.242 116.193.48.163"

#http://linux.chinaitlab.com/command/846185.html

#每次重启这个脚本时,最好清除以前所设的规则

CLEAR_IPT () {

/sbin/iptables -F

/sbin/iptables -X

/sbin/iptables -Z

/sbin/iptables -F -t nat

/sbin/iptables-X -t nat

/sbin/iptables -Z -t nat

/sbin/iptables -P INPUTDROP

/sbin/iptables -P OUTPUTACCEPT

/sbin/iptables -P FORWARD ACCEPT

}

#Iptables need to load module

MOUDLES_ADD () {

echo"1" > /proc/sys/net/ipv4/tcp_syncookies

echo"1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

}

#Secure function

secure () {

/sbin/iptables -A INPUT -i lo -j ACCEPT

/sbin/iptables -A INPUT -s $LAN -j ACCEPT

foroffice_ip in $office;do

/sbin/iptables -A INPUT -s $office_ip -j ACCEPT

done

/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -m limit--limit 1/s --limit-burst 1 -j ACCEPT

/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

/sbin/iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -jACCEPT

}

ssh() {

#只允许在LAN中使用SSH连接

/sbin/iptables -A INPUT -s $LAN -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -s 210.22.151.242 -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 4811 -j ACCEPT

}

vpn() {

/sbin/iptables -A INPUT-p tcp--dport 1723 -j ACCEPT

}

sdnat() {

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.44 -j SNAT --to-source192.168.1.21

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.36 -j SNAT --to-source192.168.1.21

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.37 -j SNAT --to-source192.168.1.21

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.38 -j SNAT --to-source192.168.1.21

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.41 -j SNAT --to-source192.168.1.21

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.42 -j SNAT --to-source192.168.1.21

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.43 -j SNAT --to-source192.168.1.21

}

CLEAR_IPT

MOUDLES_ADD

secure

ssh

vpn

sdnat

其中,最重要的就是sdnat这一段,这是将A机房的所有服务器做源地址转发。可能对于源地址转发和目的地址转发有疑问的会问为什么是源地址转发而不是目的地址转发。其实这里就像是公司内网的pc需要访问外网一样,pc设置一个网关IP,在网关设备上做源地址转换,把原来的源地址为pc机的内网地址转换成网关设备的外网地址你才能通过网关设备连接到外网,毕竟外网是靠外网IP来通信的。

4、在A机房其他服务器上配置路由,网关为隧道服务器的内网地址m)?_???

route add -net 192.168.1.149 gw 192.168.1.21

route add -net 192.168.1.150 gw 192.168.1.21

route add -net 192.168.1.151 gw 192.168.1.21

route add -net 192.168.1.152 gw 192.168.1.21

route add -net 192.168.1.153 gw 192.168.1.21

至此,可以测试A机房是否能联通B机房的所有内网IP了。


?二、IP隧道的方式(源地址转发很关键)

总体的思路:

1、通过隧道让A机房隧道服务器与B机房隧道服务器的内网互通。

2、通过源地址转发和路由让A机房隧道服务器和B机房隧道服务器能分别ping通对方机房其他服务器的内网IP。注意,源地址转发和路由都需要配置后才行。

3、A(B)机房的所有服务器添加网关,网关填写为A(B)的隧道服务器内网地址。

具体步骤:

A机房:eth0(42.62.80.0/28)eth1(192.168.1.0/24)

B机房:eth0(58.215.41.0/28)eth1(192.168.1.0/24)

A机房隧道服务器IP:42.62.80.44192.168.1.44

B机房隧道服务器IP:58.215.41.157192.168.1.157

1、隧道服务器部署

A机房隧道服务器

modprobe ip_gre

#卸载模块modprobe -r ip_gre,查看lsmod |grep ip_gre

ip tunnel add tun0 modegre local 42.62.80.44 remote 58.215.41.157

ip link set tun0 up

ifconfig tun0192.168.1.21 netmask 255.255.255.0#虚拟IP

ip route add 192.168.1.22dev tun0

iproute add 192.168.1.157 dev tun0

B机房隧道服务器

modprobe ip_gre

#卸载模块modprobe -r ip_gre,查看lsmod |grep ip_gre

ip tunnel add tun0 modegre local 58.215.41.157 remote 42.62.80.44

ip link set tun0 up

ifconfig tun0192.168.1.22 netmask 255.255.255.0#虚拟IP

ip route add 192.168.1.21dev tun0

ip route add 192.168.1.44 dev tun0

    以上命令执行完毕后,会在两台服务器上启动一个叫tun0的网络。最后两行是分别配置到对方路由,可以测试是否能ping通对方隧道服务器。隧道是没加密的,需要加密可参考一下上面的第二个链。

2、添加源地址转换和路由

A机房隧道服务器路由

#!/bin/bash

IPList="

192.168.1.148

192.168.1.149

192.168.1.150

192.168.1.151

192.168.1.152

192.168.1.153

192.168.1.154

"

add() {

for i in $IPList

do

/sbin/route add $i devtun0

done

}

del() {

for i in $IPList

do

/sbin/route del $i devtun0

done

}

case $1 in

add|del) $1;;

*)echo "Error!!!exec like:$0 add";;

esac

A机房隧道服务器源地址转发

#!/bin/bash

#auth dongbo

#http://linux.chinaitlab.com/command/846185.html

#每次重启这个脚本时,最好清除以前所设的规则

CLEAR_IPT () {

/sbin/iptables -F

/sbin/iptables -X

/sbin/iptables -Z

/sbin/iptables -F -t nat

/sbin/iptables -X -t nat

/sbin/iptables -Z -t nat

/sbin/iptables -PINPUTACCEPT

/sbin/iptables -POUTPUTACCEPT

/sbin/iptables -PFORWARD ACCEPT

#/sbin/iptables -t nat -PPREROUTINGACCEPT

#/sbin/iptables -t nat -PPOSTROUTING ACCEPT

#/sbin/iptables -t nat -POUTPUTACCEPT

}

sdnat() {

#兆维机房服务器通过源地址转发将源地址从192.168.1.36(等)封装为192.168.1.21,IP为192.168.1.21便能联通到无锡机房内网。

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.36 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.37 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.38 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.39 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.40 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.41 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.42 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.45 -j SNAT --to-source 192.168.1.21

#来自无锡机房的数据通过网关192.168.1.22(无锡机房网关)到达兆维机房时将源地址修改为192.168.1.21,这样才能到达需要的目的地址(192.168.1.36等)。ip隧道方式时这一步很关键,否则从隧道服务器上无法ping通另一个机房的除网关外其他服务器内网IP。

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.22 -d 192.168.1.36 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.22 -d 192.168.1.37 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.22 -d 192.168.1.38 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.22 -d 192.168.1.39 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.22 -d 192.168.1.40 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.22 -d 192.168.1.41 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.22 -d 192.168.1.42 -j SNAT --to-source 192.168.1.21

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.22 -d 192.168.1.45 -j SNAT --to-source 192.168.1.21

}

CLEAR_IPT

sdnat

B机房隧道服务器路由

#!/bin/bash

IPList="

192.168.1.36

192.168.1.37

192.168.1.38

192.168.1.39

192.168.1.40

192.168.1.41

192.168.1.42

"

add() {

for i in $IPList

do

/sbin/route add $i devtun0

done

}

del() {

for i in $IPList

do

/sbin/route del $i devtun0

done

}

case $1 in

add|del) $1;;

*)echo "Error!!!exec like:$0 add";;

esac

B机房隧道服务器源地址转发

#!/bin/bash

#auth dongbo

#每次重启这个脚本时,最好清除以前所设的规则

CLEAR_IPT () {

/sbin/iptables -F

/sbin/iptables -X

/sbin/iptables -Z

/sbin/iptables -F -t nat

/sbin/iptables -X -t nat

/sbin/iptables -Z -t nat

/sbin/iptables -PINPUTACCEPT

/sbin/iptables -POUTPUTACCEPT

/sbin/iptables -PFORWARD ACCEPT

#/sbin/iptables -t nat -PPREROUTINGACCEPT

#/sbin/iptables -t nat -PPOSTROUTING ACCEPT

#/sbin/iptables -t nat -POUTPUTACCEPT

}

sdnat() {

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.148 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.149 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.150 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.151 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.152 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.153 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.154 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.21 -d 192.168.1.148 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.21 -d 192.168.1.149 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.21 -d 192.168.1.150 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.21 -d 192.168.1.151 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.21 -d 192.168.1.152 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -APOSTROUTING -s 192.168.1.21 -d 192.168.1.153 -j SNAT --to-source 192.168.1.22

/sbin/iptables -t nat -A POSTROUTING -s192.168.1.21 -d 192.168.1.154 -j SNAT --to-source 192.168.1.22

}

CLEAR_IPT

sdnat

3、A(B)机房其他服务器添加到对方机房的内网网关

A机房其他服务器添加网关(比如在192.168.1.36上执行后才能让192.168.1.36连通到B机房内网)

A机房

#!/bin/bash

IPList="

192.168.1.148

192.168.1.149

192.168.1.150

192.168.1.151

192.168.1.152

192.168.1.153

192.168.1.154

"

add() {

for i in $IPList

do

/sbin/route add $i gw192.168.1.21

done

}

del() {

for i in $IPList

do

/sbin/route del $i gw192.168.1.21

done

}

case $1 in

add|del) $1;;

*)echo "Error!!!exec like:$0 add";;

esac

B机房

#!/bin/bash

IPList="

192.168.1.36

192.168.1.37

192.168.1.38

192.168.1.39

192.168.1.40

192.168.1.41

192.168.1.42

"

add() {

for i in $IPList

do

/sbin/route add $i gw192.168.1.22

done

}

del() {

for i in $IPList

do

/sbin/route del $i gw192.168.1.22

done

}

case $1 in

add|del) $1;;

*)echo "Error!!!exec like:$0 add";;

esac







打赏

本文链接:https://www.kinber.cn/post/658.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客