1. 环境
-
拓扑:
-
网卡配置:
- host1: 192.168.1.1/24
- host2:
左eth0: 192.168.1.2/24
右eth1: 192.168.2.2/24 - host3: 192.168.2.1/24
2. 需求描述
需要实现主机host1能够与host3直接通信。
3. 转发主机host2配置
3.1 开启内核路由转发参数
-
临时生效:
echo "1" > /proc/sys/net/ipv4/ip_forward
- 1
-
永久生效:
修改sysctl.conf:net.ipv4.ip_forward = 1
再执行sysctl -p
立即生效
3.2 配置路由表
配置路由表,添加静态路由规则
- 增加192.168.1.0/24网段路由配置信息
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
- 1
- 增加192.168.2.0/24网段路由配置信息
route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1
- 1
- 查看路由表是否完成配置
route
- 1
3.3 配置防火墙iptables(重要!)
这里的iptables其实不是真正的防火墙,官方给出的主要特点是:
- 列出包筛选器规则集的内容;
- 在包过滤规则集中添加/删除/修改规则;
- 列出/归零包筛选规则集的每条规则计数器
具体iptables的介绍可以参看iptables详解(1):iptables概念。
进入正题,输入iptables -list
查看Filter表,里面含三个链:
INPUT链:处理来自外部的数据。
OUTPUT链:处理向外发送的数据。
FORWARD链:将数据转发到本机的其他网卡设备上。
# iptables –list
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 xxx all — 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP)
num target prot opt source destination
1 xxx all – 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 xxx all – 0.0.0.0/0 0.0.0.0/0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
需要注意,如果想要linux主机支持转发,则需要开启内核的IP_FORWARD功能。
检查iptables如果发现Chain FORWARD (policy DROP)这行中的策略(policy)是DROP,则需要修改成为ACCEPT,方法为:
# iptables -t FORWARD -P ACCEPT
- 1
3.4 重启服务
重启network服务和iptables服务:
# service network restart
# service iptables restart
- 1
- 2
至此,可以实现host2的路由转发,使host1与host3能够相互通信。
按:
博客中提及的问题是实验室的师弟师妹搭环境时遇到的,当时的环境是在一台主机上通过VMware虚拟机开启host1和host2(都是centos系统),host2配置了一个虚拟网卡连接host1,同时通过网桥的形式配置了另外一个网卡连接另一台物理主机host3。当时在网上找了很多配置方法的介绍,但几乎都只有3.1和3.2步的介绍,导致host1和host3始终连不起来。最后才发现问题出在iptables中FORWAED的策略是DROP。。。