最近想搭一個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 # 將更改保存至文件,以使主機重啓後依然有效