因工作需要,要将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通网关了