最近想搭一个Hadoop的集群,但是迫于硬件环境有限,于是使用了5个虚拟机来进行,基本环境如下图:
然后我简单描述一下我的设计方案:
- 小集群内部可以相互访问
- 集群内每个主机都可以访问外网
- 外部网的任何主机都不能直接访问内部任何一台主机,但可以访问Server_main,以便对内部进行管理
- 使用Server_main为网关和防火墙
- 内部主机之间使用集线器连接
- 主机1,2,3,4 需要从Server_main动态获取IP
下面就是配置网络相关信息:
Server_main:
系统:CentOS 7.3
首先保证Server_main具有两部网卡,关于硬件的安装,这里不赘述了
我的两部网卡信息:
- 网卡一:
- 网卡名:eno16777736
- MAC:00:0c:29:8e:fe:44
- 网卡二:
- 网卡名:eno33554984
- MAC:00:0c:29:8e:fe:4e
配置文件内容:
网卡一:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=eno16777736
UUID=7ba0c495-599e-4a35-8016-d21744374984
DEVICE=eno16777736
IPADDR=192.168.1.1
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
网卡二:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno33554984
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
NAME=eno33554984
DEVICE=eno33554984
GATEWAY=192.168.30.2
ONBOOT=yes
DHCP的配置文件为:
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf | grep '^[^#]'
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.2 192.168.1.100;
option routers 192.168.1.1;
option domain-name-servers 114.114.114.114;
option broadcast-address 192.168.1.255;
default-lease-time 3600;
max-lease-time 12800;
}
按上面配置文件配置后,Server_main就可以提供DHCP服务服务了,但是这只是第一步,下面配置客户端:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
NAME=eno16777736
UUID=7ba0c495-599e-4a35-8016-d21744374984
DEVICE=eno16777736
ONBOOT=yes
然后,客户端的网络基本就搭建好了
但是现在内部网络内的主机无法上网,那是因为Server_main没有设置数据转发,数据包无法被发到外部,因此我就开始来设置网关的数据转发
- 关闭防火墙
查看防火墙状态
[root@localhost ~]# systemctl status firewalld.service
可以看到状态是running,于是我们需要关闭,如果是 Active是inactive (dead),则表明你已经关闭防火墙
关闭防火墙
[root@localhost ~]# systemctl stop firewalld.service
已经关闭成功
禁止防火墙开机自启
[root@localhost ~]# systemctl disable firewalld.service
安装iptables
[root@localhost ~]# yum install iptables.x86_64
[root@localhost ~]# yum install iptables-services
将iptables加入开机启动
[root@localhost ~]#systemctl enable iptables.service
设置内核参数,使其支持数据转发
[root@localhost ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p #不用重启启用更新
net.ipv4.ip_forward = 1
配置数据转发策略:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.30.132 #将内网的数据转发到外网,192.168.30.132为对外网口的IP
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables # 将更改保存至文件,以使主机重启后依然有效