网络拓扑

我们要搭建网关的网络拓扑如下,将centos服务器搭建成网关



图1

说明:

*
eth1是内网网卡接口,ip是:192.168.1.1/24

*
eth0是外网网卡接口,ip是:10.10.90.107/24

使用工具

如果系统有自带防火墙 firewalld,需要关闭,并禁止开机自启动
systemctl stop firewalld # 停止 firewalld 服务 systemctl disable firewalld #
禁止开机自启动服务
安装 iptables 防火墙和 dhcp 服务
yum -y install iptables-services # 安装 iptables yum -y install dhcp   # 安装 dhcp
iptables介绍

iptalbes的构架如图



图2

一共有五个环节 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING,两条路线。

*
发给本主机的数据包:入口==》PREROUTING ==》INPUT ==》主机 ==》OUTPUT ==》POSTROUTING ==》出口

*
需要经过服务器转发的数据包: 入口 ==》PREROUTING ==》FORWARD ==》POSTROUTING ==》出口

每个关节都可以实现如上图所示的功能,一共有四个:

*
raw :高级功能,如网址装换,一般不用

*
mangle:高级功能,数据包的修改,一般不用

*
nat:地址转换,对源地址或者目的地址进行修改

*
filter:过滤器,过滤不符合要求的包

iptables的简单指令
-t<表>:指定要操纵的表; -A:向规则链中添加条目; -D:从规则链中删除条目; -I:向规则链中插入条目; -R:替换规则链中的条目; -L
:显示规则链中已有的条目; -F:清楚规则链中已有的条目; -Z:清空规则链中的数据包计算器和字节计数器; -N:创建新的用户自定义规则链; -P
:定义规则链中的默认目标; -h:显示帮助信息; -p:指定要匹配的数据包协议类型; -s:指定要匹配的数据包源ip地址; -j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口; -o<网络接口>:指定数据包要离开本机所使用的网络接口。
我们来介绍一下怎么添加 iptables 的规则:

首先看看我的设置的规则表以及注释:
[root@localhost ~]# cat /etc/sysconfig/iptables # Generated by iptables-save
v1.4.21 on Sat Apr 21 17:49:38 2018 *nat  # nat 表,即转发表 :PREROUTING ACCEPT
[94:4332] # 在 PREROUTING 环节中默认是通过所有包 :INPUT ACCEPT [3:400] # 在 INPUT 环节中默认是通过所有包
:OUTPUT ACCEPT [0:0] # 在 OUTPUT 环节中默认是通过所有包 :POSTROUTING ACCEPT [0:0] # 在
POSTROUTING 环节中默认是通过所有包 ​ -A PREROUTING -d 10.10.90.107/32 -i eth0 -p tcp -m tcp
--dport 21 -j DNAT --to-destination 192.168.1.254 # 在 PREROUTING 环节中,将目的地址是
10.10.90.107(也就是图1中的eth0)、目的端口是21的采用 tcp 链接的数据包的目的地址转换成目的地址是 192.168.1.254。其中
-m tcp --dport 21 是连用的,意思是匹配 tcp 连接的21号端口。 ​ -A POSTROUTING -s 192.168.1.0/24 -o
eth0-j SNAT --to-source 10.10.90.107 # 在 POSTROUTING 环节中,将原地址是 192.168.1.0/24
网络中的地址装换成 10.10.90.107 并通过网卡 eth0 传送出去 ​ COMMIT # Completed on Sat Apr 21
17:49:38 2018 # Generated by iptables-save v1.4.21 on Sat Apr 21 17:49:38 2018
*filter # filter 表,即过滤表 :INPUT DROP [0:0] # 在 INPUT 环节,默认拒绝所有输入数据包(除下面规则允许的数据包外)
:FORWARD DROP [0:0] # 在 FORWARD 环节,默认拒绝所有输入数据包(除下面规则允许的数据包外) :OUTPUT ACCEPT
[0:0] # 在 OUTPUT 环节,默认允许所有输入数据包 ​ -A INPUT -m state --state RELATED,ESTABLISHED
-j ACCEPT # 这个很重要,意思是在 INPUT 环节允许已经建立连接的网络连接的数据包通过,就是说如果内网的 192.168.1.10 和 外网的
10.10.90.108 如果已经通信了,那么在 INPUT 环节直接放行 ​ -A INPUT -i eth1 -p udp -m udp --dport
67:68 -j ACCEPT # 在 INPUT 环节,从端口 eth1 进入的 udp 连接的端口号为 67 到 68 的数据包放行。 ​ -A INPUT
-i eth1 -p tcp -m tcp --dport 22 -j ACCEPT # 在 INPUT 环节,从端口 eth1 进入的 tcp
连接的端口号为 22 的数据包放行。 ​ -A INPUT -i eth0 -j ACCEPT # 在 INPUT 环节,从端口 eth0 进入的数据包放行。
​ -A INPUT -s 192.168.1.0/24 -i eth1 -j ACCEPT # 在 INPUT 环节,从端口 eth1 进入的源地址是
192.168.1.0/24 网络的数据包放行。 ​ -A INPUT -s 10.10.90.107/32 -d 192.168.1.1/32 -j
ACCEPT # 在 INPUT 环节,源地址是 10.10.90.107,目的地址是 192.168.1.1 的数据包放行,就是说允许从 eth0 到
eth1的传送。 ​ -A FORWARD -s 192.168.1.0/24 -j ACCEPT # 在 FORWARD 环节,源地址是
192.168.1.0/24 网络的数据包放行。 ​ -A FORWARD -d 192.168.1.254/32 -p tcp -m tcp --dport
21 -j ACCEPT # 在 FORWARD 环节,源地址是 192.168.1.254 的主机,采用 tcp 连接,并且端口是 21 的数据包放行。 -A
FORWARD-m state --state RELATED,ESTABLISHED -j ACCEPT # 这个很重要,意思是在 FORWARD
环节允许已经建立连接的网络连接的数据包通过,和 INPUT 的意思一样 COMMIT # Completed on Sat Apr 21 17:49:38
2018 ​
规则上面说的很清楚了,那么我们来试试怎么创建规则:
# 基本语法 iptables -t 表名 【选项名】{-A|D|I|..} 【环节】{INPUT|FORWARD|..} 【需要的操作】 # 例如
iptables-t nat -A INPUT ..... # 在 nat 表中加入一条在 INPUT 环节的规则,其中 filter 没有表名,直接省略
'-t 表名' 的输入,如 iptables -A FORWARD ... # 在 filter 表中加入一条 FORWORD 环节的规则。
规则加好了后需要如下操作
# 打开系统的ip转发功能,并不用重启,立即生效 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl-p ​ # 保存你添加的规则,并重启 iptables 服务,当然,每次你修改规则后都要保存和重启服务 iptables-save >
/etc/sysconfig/iptables # 保存修改规则 systemctl start iptables # 启动服务,适合你第一次运行
iptables systemctl enable iptables # 允许开机自启动 systemctl restart iptables # 重启服务
规则的查看和删除
iptables -t 表名(省略时为 filter 表)-L -n --line-numbers iptables -t 表名(省略时为 filter
表)-D 环节 规则id
DHCP服务搭建

当规则建立成功后我们来看看 dhcp 的搭建,dhcp 服务很简单,只要配置指定文件就行
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf # DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example #   see dhcpd.conf(5) man page ​
# 网络和子网掩码 subnet 192.168.1.0 netmask 255.255.255.0 { ​   range 192.168.1.2 192
.168.1.253;   # 分配地址范围   option broadcast-address 192.168.1.255; # 网络广播地址    
option routers192.168.1.1;   # 网关,这里是本主机ip,因为网关和dhcp服务都在本主机   option
domain-name-servers159.226.39.1;     # dns 服务器ip,可以写多个,但不要写 8.8.8.8   option
netbios-name-servers192.168.1.1;     # win 服务器ip   option domain-name lan;   #
搜索域   default-lease-time 86400;   # 默认租用期,单位为s   max-lease-time 86400;   #
最长租用期 } ​ # 下面是指定特定的主机为特定ip,如ftp host ftp_server {   hardware ethernet 52
:54:00:6f:f9:63;   # 指定主机 mac 地址   fixed-address 192.168.1.254;   # 为指定主机分配的ip
}
搭建完成后
# 重启 dhcp 服务就行了 systemctl enable dhcpd # 启动 systemctl start dhcpd # 允许开机自启动
systemctlrestart dhcpd # 重启


友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信