1. 概述:先确定问题范围
故障先不要慌,分三类定位:DNS(域名无法解析)、路由(可达性问题)和NAT/端口映射(服务无法访问)。
小分段:先在本地和服务器分别做 ping、traceroute、dig/nslookup,确定是解析问题还是链路问题。
小分段:记录时间、IP、服务器提供商、实例类型与防火墙规则,方便恢复或向机房工单提交。
2. 远程连通与网口检查(SSH 能否连上)
步骤1:从本地尝试 SSH:ssh -vvv user@your-server-ip 查看握手阶段失败信息。
步骤2:登录服务器后检查网卡与路由:ip addr show; ip route show; 如果没 IP,检查 cloud-init 或 DHCP 客户端日志。
步骤3:若网口有 IP 但无法外网:尝试 ping 8.8.8.8 与 traceroute 8.8.8.8,确定是否为默认路由问题或上游丢包。
3. DNS 排查与修复(域名解析失败)
步骤1:本地与服务器分别运行 dig +trace yourdomain.com 和 dig @8.8.8.8 yourdomain.com,确认是权威解析问题还是本机缓存。
步骤2:Linux 检查 /etc/resolv.conf 是否被 systemd-resolved 管理(systemctl status systemd-resolved),若使用静态 DNS,写入 /etc/resolv.conf:nameserver 8.8.8.8。
步骤3:若是域名解析到错误 IP,检查 DNS 提供商的 A/AAAA 记录并清理 TTL,修改后可用 dig 更新确认;若使用自建 Bind9 检查 /var/log/syslog /var/log/named.log 与 named.conf.zone 配置并重启 service bind9 restart。
4. 路由诊断与修正(丢包、高延迟或不可达)
步骤1:使用 traceroute -n 或 mtr -rwz 观察路径在哪一跳丢包或延迟飙升。
步骤2:在服务器上检查路由表 ip route show,确认有默认路由(default via X.X.X.X dev eth0)。若缺失,使用 ip route add default via <网关IP> dev <接口> 临时添加,永久则修改 /etc/network/interfaces 或 cloud-init。
步骤3:多网卡或策略路由时检查 ip rule show 和 ip route show table
,必要时添加策略路由。
5. NAT 基础与典型场景(多网段/内网出站问题)
概念:NAT 把私有地址映射为公网地址,常见于网关或转发主机。
步骤1:确认内核是否允许转发:sysctl net.ipv4.ip_forward 应为1,临时设置 sysctl -w net.ipv4.ip_forward=1,永久写入 /etc/sysctl.conf。
步骤2:使用 iptables 做源地址伪装(MASQUERADE):iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE(eth0 为外网接口);保存规则后重启iptables服务或使用 iptables-save > /etc/iptables/rules.v4。
6. 端口映射与 DNAT(外网访问内网服务)
场景:外网访问服务器上的服务或转发到内网其它主机。
步骤1:DNAT 例子(把公网端口 80 转到内网 192.168.1.10:80):
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
iptables -t nat -A POSTROUTING -s 192.168.1.10/32 -o eth0 -j MASQUERADE
步骤2:确认 FORWARD 链允许转发:iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT。
7. 使用 nftables 的等效配置
如果系统使用 nftables,参考写法:
nft add table ip nat; nft 'add chain ip nat PREROUTING { type nat hook prerouting priority 0; }'; nft 'add rule ip nat PREROUTING iifname "eth0" tcp dport 80 dnat to 192.168.1.10:80'。
小分段:同样需开启 net.ipv4.ip_forward,并在 filter 表中允许 FORWARD 流量。
8. 防火墙 / cloud provider 安全组与端口被阻断
步骤1:先在服务器上用 ss -tunlp 或 netstat -tulpn 确认服务监听端口。
步骤2:检查本机防火墙(ufw status, firewalld 或 iptables -L)是否允许;再到云平台控制台检查安全组/防火墙策略是否开放对应端口与来源 IP。
步骤3:若云平台 NAT 网关或负载均衡存在,确认其健康检查通过并已配置转发规则。
9. MTU、MSS 与分片问题(导致页面加载慢或部分站点不可达)
症状常为 HTTPS 下载卡住或大型数据包丢失。
步骤1:在客户端或服务器使用 ping -M do -s 测试最大不分片包;调整 MTU 或在 iptables 中设置 TCPMSS:iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu。
步骤2:检查 VPN 或隧道(如 GRE、IPSec)常需减小 MTU 为 1400 或更低,并在路由器上配置 MSS clamp。
10. 日志收集、抓包与联系机房的模板流程
步骤1:抓包 tcpdump -i eth0 host and port 80 -w /tmp/capture.pcap,然后用 Wireshark 分析三次握手或 ICMP。
步骤2:收集输出:ip addr; ip route; iptables -t nat -L -n -v; sysctl net.ipv4.ip_forward; dig/nslookup 输出和 traceroute。
步骤3:联系机房时把上述输出和时间点、客户端 IP 一并提交,要求他们检查上游或交换机端口是否有异常。
11. 常见误区与避免措施
误区1:只改本机 /etc/resolv.conf 而不看 cloud-init 或 systemd-resolved 会被重写。
误区2:在 NAT 环境只做 PREROUTING DNAT 但忘记做 POSTROUTING MASQUERADE 导致响应包回不到客户端。
避免措施:把配置写入正确的持久文件并测试重启后是否生效。
12. Q1: 为什么域名在本地能解析但服务器上解析失败?
可能是服务器使用了不同的 DNS 配置或被本地缓存污染。先在服务器运行 dig @8.8.8.8 yourdomain.com 和 systemd-resolve --status 检查;若 /etc/resolv.conf 被 cloud-init 管理,需修改 cloud-init 配置或禁用 systemd-resolved,并重启网络服务以永久生效。
13. Q2: 我配置了 DNAT,但外网仍访问不到内部服务,怎么办?
检查三项:一、确认内核转发已启用(net.ipv4.ip_forward=1);二、PREROUTING 做了 DNAT 后需在 POSTROUTING 做 MASQUERADE 或相应 SNAT,确保返回包能走到正确出口;三、检查 FORWARD 规则与云平台安全组是否允许转发端口。
14. Q3: 路由显示正常但 traceroute 在机房某跳停住,如何定位与处理?
机房交换或上游可能丢 ICMP/TTL 导致 traceroute 中断,先用 mtr 长时间观测丢包位置并抓包看是否是对端丢包;若确定是机房上游问题,整理 traceroute、mtr 和 tcpdump 输出,按时间提交工单请求机房检查对应交换/路由设备。
来源:挂美国服务器常见问题与解决指南包括DNS、路由和NAT设置