CentOS物理机外网
- 物理机
- 2025-08-03
- 5
nmcli
或修改配置文件实现网络连通
前置条件验证
硬件接口确认
使用ip link show
命令查看可用网卡设备(如ens33/eth0),确保物理网线已正确插入对应端口,典型输出示例:
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:aa:bb:cc brd ff:ff:ff:ff:ff:ff
若未检测到期望中的网卡名称,需进入BIOS启用PCI-E插槽或更换PCI网卡扩展卡。
IP地址分配模式选择
部署场景 | 推荐方案 | 优点 | 注意事项 |
---|---|---|---|
动态获取 | DHCP客户端 | 自动更新租约周期 | 依赖路由器稳定性 |
静态固定 | 手动配置 | IP持久不变 | 需避开DHCP地址池范围 |
特殊需求 | APIPA自设 | 临时测试用途 | 仅限内网通信 |
建议生产环境优先采用静态IP配置,通过修改/etc/sysconfig/network-scripts/ifcfg-ens33
文件实现:
TYPE=Ethernet BOOTPROTO=none # 禁用DHCP ONBOOT=yes # 启动时激活该接口 IPADDR=192.168.1.100 # 根据子网规划填写 NETMASK=255.255.255.0 # CIDR格式可写作PREFIX=24 GATEWAY=192.168.1.1 # 默认路由指向上层交换机 DNS1=8.8.8.8 # 公共DNS解析服务 DNS2=114.114.114.114 # 备用解析节点 DEFROUTE=yes # 允许默认路由规则生效 PEERDNS=no # 不继承上游设备的DNS设置
保存后执行systemctl restart NetworkManager
使配置生效。
路由与NAT转发配置
当物理机位于私有网络时,必须通过NAT机制实现互联网访问,编辑主配置文件:
vi /etc/sysctl.conf
添加以下内核参数:
net.ipv4.ip_forward=1 # 开启IPv4转发功能 net.ipv4.conf.default.rp_filter=2 # 放宽反向路径过滤限制 net.ipv4.conf.all.accept_redirects=0 # 禁止ICMP重定向欺骗攻击
加载新设置:
sysctl -p
创建持久化的防火墙规则(基于firewalld服务):
firewall-cmd --permanent --add-masquerade --zone=public firewall-cmd --reload
该操作会在公网区域自动生成SNAT规则,将内部请求源地址转换为网关IP对外发送,可通过iptables -t nat -L POSTROUTING
验证规则是否存在类似条目:
POSTROUTING (policy ACCEPT) target: MASQUERADE rule hit count: ANY prot opt source destination ... anywhere -> anywhere ... use TOS=0x00 flag bits=0x00 metric=0 mark=0x4000/0x4500 route=...
连通性测试方法论
分层诊断流程
层级 | 测试工具 | 预期结果 | 异常处理方向 |
---|---|---|---|
L1链路层 | ping -I ens33 192.168.1.1 |
TTL超时前收到响应包 | 检查线缆/交换机端口状态 |
L2交换层 | arp -an | grep gateway |
显示正确的MAC地址映射 | 排查ARP欺骗或代理冲突 |
L3网络层 | traceroute www.baidu.com |
逐跳追踪至目标节点 | 定位丢包节点位置 |
L4传输层 | telnet smtp.example.com 25 |
建立TCP三次握手连接 | 验证端口可达性 |
MTR综合监测
安装mtr工具进行实时路径质量监控:
yum install mtr -y mtr --report google.com
重点关注Loss%、Avg延迟等指标,若某段链路丢包率超过5%,则可能存在MTU不匹配问题,此时应执行路径MTU发现测试:
ping -M do -s 1472 <目标IP>
逐步减小载荷长度直至不再分片为止。
高级调优策略
TCP栈参数调整
针对高吞吐量场景,建议修改系统级网络参数:
cat >> /etc/sysctl.conf <<EOF net.core.somaxconn=65535 # 最大并发连接数 net.ipv4.tcp_tw_reuse=1 # 快速回收TIME_WAIT状态套接字 net.ipv4.tcp_fin_timeout=15 # 缩短FIN报文等待时间(秒) fs.file-max=1000000 # 允许打开的最大文件描述符数量 EOF sysctl --system
同步更新用户态限制值:
ulimit -n 65535
队列调度算法优化
对于多租户共享带宽的环境,可采用FQ_CODEL公平队列算法替代默认策略:
tc qdisc replace dev ens33 root handle 1: fq_codel limit 1000 quantum 300 ecn
该配置可实现流量整形与拥塞控制双重效果,有效降低突发流量导致的缓冲区溢出概率。
典型故障案例解析
案例1:能Ping通网关但无法解析域名
现象描述:执行ping 8.8.8.8
成功,但ping www.google.com
失败。
根本原因:DNS客户端配置错误或上游递归解析失效。
解决方案:
- 验证
/etc/resolv.conf
中的DNS服务器列表有效性; - 使用dig工具进行权威查询:
dig @8.8.8.8 example.com +trace
; - 检查本地hosts文件是否存在覆盖条目。
案例2:间歇性断连伴随ARP告警
日志特征:dmesg | tail -n50
出现大量arp: entry added
记录。
处置步骤:
- 启用ARP忽略模式:
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
; - 绑定特定MAC地址到接口:在ifcfg文件中增加
HWADDR=00:0c:29:aa:bb:cc
; - 部署arptables防火墙规则过滤非规应答包。
FAQs
Q1: CentOS物理机设置静态IP后无法上网怎么办?
A: 按顺序执行以下排查步骤:
- 确认网关可达性:
ping <网关IP>
; - 检查DNS解析是否正常:
nslookup www.baidu.com
; - 验证路由表是否正确:
route -n
应包含默认路由项; - 确保SELinux未阻断网络服务:
getenforce
若为Enforcing模式,尝试临时关闭测试。
Q2: 如何确认NAT转发是否成功工作?
A: 通过双向测试验证:
- 从内部机器发起外部访问请求(如
curl ifconfig.me
); - 同时在另一台外网设备上执行反向探测:
telnet <公网IP> <端口号>
; - 使用tcpdump抓包分析地址转换过程:
tcpdump -i any host <内部IP>
观察出站数据包