Linux 网络配置与故障排查全攻略
在 Linux 系统中,网络配置和故障排查是日常使用中不可避免的问题。本文将详细介绍 IP 路由表的修改、网络故障排查方法以及安全登录其他计算机的技巧。
1. 修改 IP 路由表
IP 路由表决定了网络数据包的流向。在 IP 地址范围 192.168.0.0 - 192.168.0.255 内,子网掩码(Genmask)和目标地址(Destination)匹配,这些流量会留在局域网内,无需经过路由器,因此在网关(Gateway)列中显示为 *。而其他 IP 地址的流量默认会通过路由器,在本例中路由器地址为 192.168.0.1,子网掩码为 0.0.0.0。
路由表中的标志列(Flags)提供了路由的相关信息,常见的标志有 U(路由启用)和 G(使用网关)。
1.1 使用 route 命令修改路由表
route 命令不仅可以查看路由表,还能对其进行修改。但使用时需谨慎,错误的修改可能导致网络故障。
例如,当网关丢失时,可按以下步骤操作:
# 查看路由表
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref
¯Use Iface
192.168.0.0 * 255.255.255.0 U 0 0
¯0 eth0
# 添加网关
# route add -net default gw 192.168.0.1 dev eth0
# 再次查看路由表
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric
¯Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0
¯0 0 eth0
default 192.168.0.1 0.0.0.0 UG 0
¯0 0 eth0
上述命令中, add 表示添加新路由, -net 表示目标是一个网络, gw 指定网关地址, dev eth0 指定使用的设备为以太网网卡。
若要让无线网卡(ath0)访问以 10.1.xxx.xxx 为基础的局域网,且禁止其访问互联网,可执行以下命令:
# 查看路由表
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric
¯Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0
¯0 0 eth0
default 192.168.0.1 0.0.0.0 UG 0
¯0 0 eth0
# 添加新路由
# route add -net 10.1.0.0 netmask 255.255.0.0 dev
¯ath0
# 再次查看路由表
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric
¯Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0
¯0 0 eth0
10.1.0.0 * 255.255.0.0 U 0
¯0 0 ath0
default 192.168.0.1 0.0.0.0 UG 0
¯0 0 eth0
若要删除该路由,使用 del 命令:
# 查看路由表
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric
¯Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0
¯0 0 eth0
10.1.0.0 * 255.255.0.0 U 0
¯0 0 ath0
default 192.168.0.1 0.0.0.0 UG 0
¯0 0 eth0
# 删除路由
# route del -net 10.1.0.0 netmask 255.255.0.0 dev
¯eth0
# 再次查看路由表
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric
¯Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0
¯0 0 eth0
default 192.168.0.1 0.0.0.0 UG 0
¯0 0 eth0
2. 网络故障排查
虽然现在的 Linux 发行版在网络方面通常表现良好,但仍可能遇到问题。以下是一些基本的故障排查方法:
1. 检查本地主机 :使用 ping 127.0.0.1 命令检查本地主机是否正常。若无法 ping 通,说明系统存在严重问题。
2. 检查外部 IP 地址 :若本地主机正常,使用 ping 命令检查机器的外部 IP 地址。若无法 ping 通,确保网络功能已启用。
3. 检查本地网络 :若外部 IP 地址可 ping 通,尝试 ping 本地网络中的其他机器。若失败,检查网络接口,确保电缆已正确连接,使用 ifconfig 或 iwconfig 命令验证接口状态,必要时使用 ifup 命令启用接口,然后再次尝试 ping 。
4. 检查路由器 :若能 ping 通本地网络中的其他机器,但无法 ping 通路由器,使用 route 命令检查路由表,若缺少条目,按照上述修改路由表的方法添加。
5. 检查互联网连接 :若能 ping 通路由器,尝试 ping 互联网上的已知可用机器,如 www.google.com 或 www.apple.com 。若无法 ping 通,尝试 ping 其 IP 地址。以下是一些常见网站的 IP 地址:
| 网站 | IP 地址 |
| ---- | ---- |
| www.google.com | 72.14.203.99 |
| www.apple.com | 17.254.0.91 |
| www.ubuntu.com | 82.211.81.166 |
| www.ibm.com | 129.42.16.99 |
| www.granneman.com | 216.23.180.5 |
获取这些 IP 地址的方法有多种,可使用 ping 命令、 traceroute 命令或 host 命令。
- 检查 DNS 问题 :若能 ping 通 IP 地址,但无法 ping 通域名,说明存在 DNS 问题。若使用 DHCP,运行
dhclient命令尝试更新 DNS 信息;若未使用 DHCP,从路由器、管理员或 ISP 处获取 DNS 信息,并以 root 权限将其添加到/etc/resolv.conf文件中,示例如下:
nameserver 24.217.0.5
nameserver 24.217.0.55
也可尝试使用路由器的 IP 地址作为 DNS 服务器:
nameserver 192.168.0.1
然后使用 ifdown 和 ifup 命令重新启动网络接口。
- 检查硬件和软件 :若上述方法都无法解决问题,从硬件开始检查,确保所有设备正确安装和连接。若硬件没问题,检查软件,最坏的情况是硬件没有适用于 Linux 的驱动程序。对于无线网卡,由于部分制造商不配合 Linux 开发,可能存在兼容性问题。在购买无线网卡前,可通过以下网站查看其与 Linux 的兼容性:
推荐使用 Netgear WG511T 无线 PCMCIA 卡,在最新的 K/Ubuntu 系统中可直接使用。
3. 安全登录其他计算机
在早期, telnet 是连接其他计算机的常用程序,但它存在严重的安全问题,所有传输的数据都未加密。为解决这一问题, ssh (安全外壳)应运而生。 ssh 不仅能实现 telnet 的所有功能,还对传输的数据进行加密,更安全可靠。
3.1 使用 ssh 登录其他计算机
假设从笔记本电脑(名为 pound,IP 地址为 192.168.0.15)使用 ssh 命令登录到台式电脑(名为 eliot,IP 地址为 192.168.0.25)查看文件,笔记本电脑的用户名是 ezra,台式电脑的用户名是 tom,可执行以下命令:
$ ssh tom@192.168.0.25
tom@192.168.0.25’s password:
Linux eliot 2.6.12-10-386 #1 Mon Jan 16 17:18:08 UTC
¯ 2006 i686 GNU/Linux
Last login: Mon Feb 6 22:40:31 2006
¯from 192.168.0.15
连接后会提示输入密码,输入密码(输入过程中不可见)并按 Enter 键,若密码正确,将显示目标机器的相关信息,此时可像在本地一样在目标机器上执行授权命令。
若首次连接到 eliot,会看到以下提示:
$ ssh tom@192.168.0.25
The authenticity of host ‘192.168.0.25
¯(192.168.0.25)’ can’t be established.
RSA key fingerprint is 54:53:c3:1c:9a:07:22:0c:82:
¯7b:38:53:21:23:ce:53.
Are you sure you want to continue connecting
¯(yes/no)?
这是因为 ssh 不识别该机器,需要验证其身份。输入 yes 并按 Enter 键,会看到以下信息及密码提示:
Warning: Permanently added ‘192.168.0.25’ (RSA)
¯to the list of known hosts.1
tom@192.168.0.25’s password:
ssh 会将该机器的 RSA 密钥指纹存储在 ~/.ssh/known_hosts 文件中。根据 /etc/ssh/ssh_config 文件中 HashKnownHosts 选项的设置,该文件中的记录会以不同格式显示。
若 HashKnownHosts 设置为 no ,记录格式如下:
192.168.0.25 ssh-rsa SkxPUQLYqXSzknsstN6Bh2MHK5AmC6E
¯pg4psdNL69R5pHbQi3kRWNNNNO3AmnP1lp2RNNNNOVjNN9mu5FZe
¯l6zK0iKfJBbLh/Mh9KOhBNtrX6prfcxO9vBEAHYITeLTMmYZLQHB
¯xSr6ehj/9xFxkCHDYLdKFmxaffgA6Ou2ZUX5NzP6Rct4cfqAY69E
¯5cUoDv3xEJ/gj2zv0bh630zehrGc=
若 HashKnownHosts 设置为 yes ,记录格式如下:
NNNNO3AmnP1lp2RNNNNOVjNNNVRNgaJdxOt3GIrh00lPD6KBIU1k
¯aT6nQoJUMVTx2tWb5KiF/LLD4Zwbv2Z/j/0czCZIQNPwDUf6YiKU
¯FFC6eagqpLDDB4T9qsOajOPLNinRZpcQoPlXf1u6j1agfJzqUJUY
¯E+Lwv8yzmPidCvOuCZ0LQH4qfkVNXEQxmyy6iz6b2wp=?
这种加密方式从安全角度看是好的,但如果目标机器的操作系统重新安装, ssh 密钥会发生变化,再次登录时会收到警告:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY
Someone could be eavesdropping on you right now
¯(man-in-the-middle attack)!
It is also possible that the RSA host key has just
¯been changed.
The fingerprint for the RSA key sent by the remote
¯host is
19:85:59:5c:6a:24:85:53:07:7a:dc:34:37:c6:72:1b.
Please contact your system administrator.
Add correct host key in /home/pound/.ssh/
¯known_hosts to get rid of this message.
Offending key in /home/pound/.ssh/known_hosts:8
RSA host key for 192.168.0.125 has changed and you
¯have requested strict checking.
Host key verification failed.
解决方法是删除 pound 机器上 ~/.ssh/known_hosts 文件中对应 eliot 的记录,保存文件后重新连接, ssh 会再次询问是否接受新密钥,输入 yes 即可。
若连接多个机器,难以确定要删除的记录,可编辑 /etc/ssh/ssh_config 文件,将 HashKnownHosts 设置为 no 以避免此问题。
3.2 无密码安全登录其他机器
可以通过配置实现无密码登录其他机器。以从 pound 机器(用户名 ezra)无密码登录到 eliot 机器(用户名 tom)为例,步骤如下:
1. 在 pound 机器上生成 ssh 认证密钥:
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key
¯(/home/ezra/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in
¯/home/ezra/.ssh/id_dsa.
Your public key has been saved in
¯/home/ezra/.ssh/id_dsa.pub.
按提示操作,接受默认的密钥保存位置,两次输入空密码,即可生成私钥 ~/.ssh/id_dsa 和公钥 ~/.ssh/id_dsa.pub 。
2. 将公钥从 pound 机器复制到 eliot 机器:
$ ssh-copy-id -i ~/.ssh/id_dsa.pub tom@192.168.0.25
- 尝试登录
eliot机器:
$ ssh tom@192.168.0.25
Linux eliot 2.6.12-10-386 #1 Mon Jan 16 17:18:08 UTC
¯ 2006 i686 GNU/Linux
Last login: Mon Feb 6 22:40:31 2006 from
¯192.168.0.15
此时无需输入密码即可登录。
虽然这种方法看起来不安全,但它基于密钥加密技术,实际上是安全的。通过掌握这些网络配置和故障排查方法,以及安全登录技巧,能更高效地使用 Linux 系统。
mermaid 流程图:网络故障排查流程
graph TD;
A[网络接口正常但无法上网] --> B[ping 本地主机 127.0.0.1];
B -- 失败 --> C[系统严重损坏,停止排查];
B -- 成功 --> D[ping 外部 IP 地址];
D -- 失败 --> E[确保网络功能启用];
D -- 成功 --> F[ping 本地网络其他机器];
F -- 失败 --> G[检查接口和电缆,使用 ifconfig 或 iwconfig 验证,必要时 ifup 启用];
G --> F;
F -- 成功 --> H[ping 路由器];
H -- 失败 --> I[使用 route 检查路由表,添加缺失条目];
I --> H;
H -- 成功 --> J[ping 互联网已知机器域名];
J -- 失败 --> K[ping 其 IP 地址];
K -- 成功 --> L[DNS 问题];
L -- 使用 DHCP --> M[运行 dhclient 更新 DNS 信息];
L -- 未使用 DHCP --> N[从路由器等获取 DNS 信息,添加到 /etc/resolv.conf];
N --> O[ifdown 和 ifup 重新启动网络接口];
K -- 失败 --> P[检查硬件和软件];
J -- 成功 --> Q[网络正常];
Linux 网络配置与故障排查全攻略
4. 网络工具的综合应用与拓展
在 Linux 网络环境中,除了前面介绍的核心工具,还有一些其他网络工具也能发挥重要作用,它们相互配合可以更高效地完成各种网络任务。
4.1 wget 与 curl 的使用
-
wget:wget是一个非交互式的网络下载工具,它可以在后台运行,支持断点续传、递归下载等功能。例如,要下载一个文件,可以使用以下命令:
wget https://example.com/file.zip
如果要进行递归下载一个网站的内容(谨慎使用,可能会对目标服务器造成较大压力),可以使用以下命令:
wget -r -np https://example.com
其中, -r 表示递归下载, -np 表示不进入父目录。
- curl : curl 是一个功能强大的网络传输工具,支持多种协议,如 HTTP、FTP、SMTP 等。它可以用于发送 HTTP 请求、上传和下载文件等。例如,发送一个简单的 GET 请求:
curl https://example.com
如果要发送一个带有表单数据的 POST 请求,可以使用以下命令:
curl -X POST -d "param1=value1¶m2=value2" https://example.com/api
其中, -X POST 表示使用 POST 方法, -d 后面跟着要发送的表单数据。
4.2 rsync 的数据同步
rsync 是一个用于远程和本地文件同步的工具,它可以高效地同步文件和目录,只传输文件中发生变化的部分。例如,将本地目录 local_dir 同步到远程服务器的 remote_dir 目录:
rsync -avz local_dir/ user@remote_host:remote_dir/
其中, -a 表示归档模式,保留文件的所有属性, -v 表示详细输出, -z 表示压缩传输。
5. 网络配置的持久化与自动化
在 Linux 系统中,为了确保网络配置在系统重启后仍然生效,需要进行持久化配置。同时,为了提高效率,可以将一些常用的网络配置操作自动化。
5.1 网络配置文件
不同的 Linux 发行版网络配置文件的位置和格式可能会有所不同,但常见的配置文件有 /etc/network/interfaces (Debian 和 Ubuntu 系列)和 /etc/sysconfig/network-scripts/ifcfg-* (Red Hat 和 CentOS 系列)。
以 Debian 和 Ubuntu 为例,编辑 /etc/network/interfaces 文件可以配置网络接口:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4
上述配置将 eth0 接口设置为静态 IP 地址。
5.2 自动化脚本
可以编写脚本将一些常用的网络配置操作自动化。例如,编写一个脚本用于添加路由:
#!/bin/bash
# 添加默认路由
route add -net default gw 192.168.0.1 dev eth0
将上述脚本保存为 add_route.sh ,并赋予执行权限:
chmod +x add_route.sh
然后可以在需要的时候执行该脚本。
6. 网络安全的进一步保障
除了使用 ssh 进行安全登录,还可以采取其他措施来保障网络安全。
6.1 防火墙配置
防火墙可以阻止未经授权的网络访问,保护系统安全。在 Linux 系统中,常用的防火墙工具是 iptables 和 firewalld 。
以 iptables 为例,以下是一个简单的防火墙规则配置:
# 清空所有规则
iptables -F
# 允许本地回环接口
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的和相关的连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允许 SSH 连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP 和 HTTPS 连接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 拒绝其他所有输入连接
iptables -A INPUT -j DROP
上述规则允许本地回环接口、已建立和相关的连接、SSH 连接以及 HTTP 和 HTTPS 连接,拒绝其他所有输入连接。
6.2 安全审计
定期进行安全审计可以发现潜在的安全问题。可以使用 auditd 工具进行系统活动的审计。安装并启动 auditd :
apt-get install auditd # Debian 和 Ubuntu
yum install auditd # Red Hat 和 CentOS
systemctl start auditd
systemctl enable auditd
然后可以通过 ausearch 和 aureport 命令查看审计日志。
mermaid 流程图:网络工具使用流程
graph TD;
A[网络任务需求] --> B{选择工具};
B -- 下载文件 --> C[使用 wget 或 curl];
B -- 同步文件 --> D[使用 rsync];
B -- 安全登录 --> E[使用 ssh];
B -- 网络配置 --> F[使用 route、ifconfig 等];
B -- 网络故障排查 --> G[使用 ping、traceroute 等];
C --> H[执行下载操作];
D --> I[执行同步操作];
E --> J[执行登录操作];
F --> K[执行配置操作];
G --> L[执行排查操作];
H --> M[完成任务];
I --> M;
J --> M;
K --> M;
L --> M;
总结
通过本文的介绍,我们详细了解了 Linux 系统中网络配置、故障排查、安全登录以及其他网络工具的使用方法。掌握这些知识和技能,可以让我们在 Linux 网络环境中更加得心应手,高效地完成各种网络任务,同时保障系统的网络安全。在实际应用中,要根据具体情况灵活运用这些工具和方法,不断积累经验,提高解决网络问题的能力。
超级会员免费看
3

被折叠的 条评论
为什么被折叠?



