在当今的网络世界中,路由器是连接不同网络、实现数据包转发的核心设备,除了购买商业路由器,利用一台安装了CentOS操作系统的服务器来构建功能强大的路由器,不仅成本效益高,而且提供了无与伦比的灵活性和可控性,本文将详细介绍如何在CentOS系统下,一步步将其配置成一个具备基本路由和NAT(网络地址转换)功能的路由器。
核心概念与准备工作
在开始配置之前,我们需要理解几个核心概念并做好必要的准备。
IP转发是Linux内核提供的一项功能,它允许系统充当路由器,从一个网络接口接收到的数据包,根据路由表决定从另一个网络接口发送出去,默认情况下,CentOS的IP转发功能是关闭的,我们需要手动启用它。
NAT(Network Address Translation),特别是其一种形式——PAT(端口地址转换),是路由器连接内网和外网的关键,由于内网通常使用私有IP地址(如192.168.x.x),这些地址无法在公网上直接路由,NAT技术允许内网中的多台设备共享路由器唯一的公网IP地址来访问互联网。
准备工作如下:
- 一台已安装CentOS 7或更高版本的计算机。
- 至少两块网卡(NIC),一块用于连接外网(WAN),另一块用于连接内网(LAN)。
- 对Linux命令行有基本的了解。
第一步:配置网络接口
配置路由器的第一步是正确设置两块网卡的IP地址,假设我们的两块网卡分别为ens33
(用于WAN)和ens38
(用于LAN)。
配置WAN口(ens33)
WAN口通常连接到光猫或上级路由器,通过DHCP自动获取IP地址,我们可以使用nmcli
工具来查看和配置。
# 查看连接状态 nmcli connection show # 假设ens33的连接名为WAN,确保其通过DHCP获取IP nmcli connection modify WAN ipv4.method auto # 重新激活连接使配置生效 nmcli connection up WAN
配置完成后,使用 ip addr show ens33
查看是否已成功获取到公网IP地址、子网掩码和网关。
配置LAN口(ens38)
LAN口需要配置一个静态IP地址,作为内网客户端的网关,我们将其设置为 168.100.1
。
# 为ens38创建一个新的连接配置,命名为LAN nmcli connection add type ethernet ifname ens38 con-name LAN # 配置静态IP地址、子网掩码 nmcli connection modify LAN ipv4.addresses 192.168.100.1/24 nmcli connection modify LAN ipv4.method manual # 激活连接 nmcli connection up LAN
使用 ip addr show ens38
应该能看到其IP地址为 168.100.1
。
第二步:启用IP转发
这是将CentOS变成路由器的核心步骤。
临时启用(重启后失效)
sysctl -w net.ipv4.ip_forward=1
执行后,系统立即开始转发IP包,但服务器重启后会恢复默认设置。
永久启用
为了确保重启后配置依然有效,需要修改系统配置文件。
# 编辑 /etc/sysctl.conf 文件 vi /etc/sysctl.conf # 在文件末尾添加或取消以下行的注释 net.ipv4.ip_forward = 1 # 保存并退出后,应用配置 sysctl -p
这样,IP转发功能就被永久开启了。
第三步:配置防火墙与NAT
CentOS 7及以上版本默认使用firewalld
作为防火墙管理工具,我们需要配置它以允许数据包在内网和外网之间转发,并设置NAT规则。
配置防火墙区域firewalld
使用“区域”来管理不同的信任级别,我们将WAN口放入public
区域(信任度较低),LAN口放入trusted
或internal
区域(信任度较高)。
# 将WAN口(ens33)分配到public区域 firewall-cmd --zone=public --change-interface=ens33 --permanent # 将LAN口(ens38)分配到internal区域 firewall-cmd --zone=internal --change-interface=ens38 --permanent
启用NAT(Masquerading)Masquerading
是firewalld
中实现NAT的一种简单方式,它会让从internal
区域出去、 destined for public
区域的数据包,其源IP地址自动替换为WAN口的公网IP。
# 在internal区域启用masquerading firewall-cmd --zone=internal --add-masquerade --permanent
重载防火墙配置
所有更改完成后,需要重载防火墙使规则生效。
firewall-cmd --reload
至此,CentOS路由器的基本功能已经配置完成,内网中的任何设备,只要将其网关设置为168.100.1
,DNS设置为可用的公共DNS(如8.8.8
或114.114.114
),就可以通过这台CentOS服务器访问互联网了。
第四步:(可选)配置DHCP服务
为了方便内网设备自动获取IP地址,我们可以在CentOS路由器上安装并配置DHCP服务。
# 安装dhcp服务 yum install -y dhcp # 备份并编辑主配置文件 cp /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf vi /etc/dhcp/dhcpd.conf
在dhcpd.conf
文件中,添加或修改以下内容,以定义内网地址池:
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.50 192.168.100.200; # 可分配的IP范围
option domain-name-servers 8.8.8.8, 114.114.114.114; # DNS服务器
option routers 192.168.100.1; # 网关地址,即我们路由器的LAN口IP
option broadcast-address 192.168.100.255;
default-lease-time 600;
max-lease-time 7200;
}
配置完成后,启动并设置开机自启:
systemctl enable dhcpd systemctl start dhcpd
连接到LAN口的设备就可以自动获取IP地址、网关和DNS了。
相关问答FAQs
问题1:内网客户端可以 ping 通路由器的LAN口IP(192.168.100.1),但无法访问外网,是什么原因?
解答: 这是一个非常典型的故障现象,说明客户端到路由器的链路是通的,但数据包无法被转发到外网,排查步骤如下:
- 检查IP转发: 首先确认CentOS服务器的IP转发是否已启用,执行
cat /proc/sys/net/ipv4/ip_forward
,如果输出为0
,则表示未启用,请按照本文第二步的方法永久启用它。 - 检查防火墙NAT规则: 这是最常见的原因,确认
firewalld
的internal
区域是否已启用masquerading
,可以执行firewall-cmd --zone=internal --query-masquerade
来检查,如果返回no
,则说明规则未正确设置或未重载,请检查第三步的命令并确保执行了firewall-cmd --reload
。 - 检查客户端网关和DNS: 确保内网客户端的网关地址已正确设置为
168.100.1
,并且DNS服务器地址填写正确(如8.8.8
)。
问题2:为什么重启CentOS服务器后,路由功能就失效了?
解答: 这通常是因为某些配置是临时的,没有做到永久化,请检查以下几点:
- IP转发配置: 确认您是修改了
/etc/sysctl.conf
文件并执行了sysctl -p
,而不是仅仅使用sysctl -w
命令,前者是永久配置,后者是临时的。 - 网络服务自启: 确保网络管理服务
NetworkManager
是开机自启的,可以使用systemctl is-enabled NetworkManager
查看,如果不是,请执行systemctl enable NetworkManager
。 - 防火墙服务自启: 确保
firewalld
服务也是开机自启的,使用systemctl is-enabled firewalld
检查,若未启用,则执行systemctl enable firewalld
。 - DHCP服务自启: 如果配置了DHCP,同样需要确保
dhcpd
服务已设置为开机自启。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复