因工作需要,要将2个独立的网段打通,使2个网段中的某些主机能相互访问。
在不新增交换机的前提下,为达到此目标,需要一个主机有2个网口,用来连接2个网段。
环境
系统:centos7
防火墙软件:iptables
网络拓扑
有2个网段:192.168.0.X 和 192.168.1.X
有3个主机:
- A主机:192.168.0.1
- B主机:192.168.0.2(eno1网卡) 192.168.1.2(eno2网卡)
- C主机:192.168.1.1
其中B主机有2个网口,充当2个网段的中间中间路由。
目标:A和C能相互联通。
路由转发
首先需要在B主机上配置转发功能。
临时生效路由转发功能
echo 1 >/proc/sys/net/ipv4/ip_forward
永久生效路由转发功能
编辑 /etc/sysctl.conf文件,新增如下配置:
net.ipv4.ip_forward = 1
使配置生效并重启系统
sysctl -p
reboot
配置防火墙规则
配置防火墙规则,将来自0网段的网络流量,通过eno2网卡,访问1网段:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.1.0/24 -o eno2 -j MASQUERADE;
配置防火墙规则,将来自1网段的网络流量,通过eno1网卡,访问0网段:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 192.168.0.0/24 -o eno1 -j MASQUERADE;
至此,B主机已经具备了0网段、1网络路由转发的能力。
但是此时,A、C主机还不能直接相互通过ip访问,还需要进行配置。
添加路由
以A主机为例,A想要访问C主机所在的1网段,需要制定B主机作为0、1两个网段的路由。
linux添加路由命令命令:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.2
windows永久添加路由命令(没有-p,重启失效):
route -p add 192.168.1.0 mask 255.255.255.0 192.168.0.2
此时A应该可以直接ping通C了。
C想访问A主机所在0网络,该怎么配置呢?聪明的小伙伴应该不用我教了。
删除路由
A哪天不想访问C了,可以把路由规则删了。
linux命令:
route del -net 192.168.1.0 netmask 255.255.255.0
windows命令:
route -p delete 192.168.1.0 mask 255.255.255.0 192.168.0.2
问题
Destination Host Prohibited 报错
网络配置好,ping发现以下报错:
icmp_seq=1 Destination Host Prohibited
参考该篇博文解决:
在B主机使用iptables -t filter –list命令后发现filter表中的FORWARD链里有一条
“REJECT all – anywhere anywhere reject-with icmp-host-prohibited”。
想想应该就是这一条规则作怪,于是执行以下命令:
iptables -t filter -F FORWARD
OK,现在可以ping通网关了