无论是用于个人桌面还是企业服务器,Debian都能提供强大的网络功能。本教程将详细介绍Debian的网络配置,包括基本网络架构、现代的桌面网络配置、没有图像界面的现代网络配置、云环境下的现代网络配置以及底层网络配置等方面。
一、基本网络架构
现代Debian操作系统中的基本网络架构如下:
网络配置工具一览表:
软件包 | 流行度 | 大小 | 类型 | 说明 |
network-manager | V:390, I:455 | 15414 | 配置::NM | NetworkManager(守卫进程):自动管理网络 |
network-manager-gnome | V:121, I:368 | 5583 | 配置::NM | NetworkManager(GNOME前端) |
netplan.io | V:1, I:5 | 249 | config::NM+networkd | Netplan (generator): Unified, declarative interface to NetworkManager and systemd-networkd backends |
ifupdown | V:593, I:980 | 199 | 配置::ifupdown | 用来启动/关闭网络的标准工具(Debian特有) |
isc-dhcp-client | V:217, I:980 | 2866 | 配置::底层 | DHCP客户端 |
pppoeconf | V:0, I:5 | 186 | 配置::辅助 | 配置助手,以便于使用PPPoE连接 |
wpasupplicant | V:346, I:509 | 3862 | 配置::辅助 | WPA和WPA2客户端支持(IEEE 802.11i) |
wpagui | V:0, I:1 | 774 | 配置::辅助 | wpa_supplicant Qt 图形界面客户端 |
wireless-tools | V:174, I:241 | 292 | 配置::辅助 | 操控Linux无线扩展的工具 |
iw | V:35, I:472 | 302 | 配置::辅助 | 配置 Linux 无线设备的工具 |
iproute2 | V:727, I:970 | 3597 | 配置::iproute2 | iproute2, IPv6和其他高级网络配置:ip(8),tc(8)等等 |
iptables | V:315, I:740 | 2414 | 配置::Netfilter | 封包过滤和网络地址转换管理工具(Netfilter) |
nftables | V:101, I:675 | 182 | 配置::Netfilter | administration tools for packet filtering and NAT (Netfilter) (successor to {ip,ip6,arp,eb}tables) |
iputils-ping | V:200, I:997 | 120 | 测试 | 测试能否连接远程主机,通过主机名或IP 地址(iproute2) |
iputils-arping | V:3, I:39 | 49 | 测试 | 测试能否连接远程主机,通过ARP地址 |
iputils-tracepath | V:2, I:31 | 45 | 测试 | 跟踪访问远程主机的路径 |
ethtool | V:94, I:268 | 739 | 测试 | 显示或更改以太网设备的设定 |
mtr-tiny | V:5, I:47 | 156 | 测试::底层 | 追踪连接远程主机的路径(文本界面) |
mtr | V:5, I:42 | 209 | 测试::底层 | 追踪连接远程主机的路径(文本界面和GTK界面) |
gnome-nettool | V:0, I:18 | 2492 | 测试::底层 | 获取常见网络信息的工具(GNOME) |
nmap | V:26, I:202 | 4498 | 测试::底层 | 网络映射/端口扫描(Nmap,控制台) |
tcpdump | V:17, I:178 | 1340 | 测试::底层 | 网络流量分析(Tcpdump,控制台) |
wireshark | I:45 | 10514 | 测试::底层 | 网络流量分析(Wireshark,GTK) |
tshark | V:2, I:25 | 501 | 测试::底层 | 网络流量分析(控制台) |
tcptrace | V:0, I:2 | 401 | 测试::底层 | 根据tcpdump的输出生成的连接数据统计 |
snort | V:0, I:0 | 2203 | 测试::底层 | 灵活的网络入侵侦测系统(Snort) |
ntopng | V:0, I:1 | 15904 | 测试::底层 | 在网页浏览器中展示网络流量 |
dnsutils | V:18, I:293 | 272 | 测试::底层 | BIND软件包提供的网络客户端程序:nslookup(8),nsupdate(8),dig(8) |
dlint | V:0, I:3 | 53 | 测试::底层 | 利用域名服务器查询来查看DNS域信息 |
dnstracer | V:0, I:1 | 59 | 测试::底层 | 跟踪DNS查询直至源头 |
1、主机名解析
主机名解析,目前也是由 NSS (名字服务转换 Name Service Switch) 机制来支持。这个解析的流程如下。
1、”/etc/nsswitch.conf” 文件里的 “hosts: files dns” 这段规定主机名解析顺序。 (代替 “/etc/host.conf” 文件里的”order” 这段原有的功能。)
2、files 方式首先被调用。如果主机名在 “/etc/hosts” 文件里面发现,则返回所有有效地址并退出。 ( “/etc/host.conf” 文件包含 “multi on”.)
3、dns 方式被调用。如果主机名通过查询 “/etc/resolv.conf” 文件里面写的 互联网域名系统 Domain Name System (DNS) 来找到,则返回所有有效地址并退出。
一台典型的工作站在安装时可能会将主机名设置为 “host_name”,并将可选域名设置为空字符串。这样,”/etc/hosts “就会如下所示:
127.0.0.1 localhost 127.0.1.1 host_name # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
每一行由 IP 地址 开始,接下来是相关联的主机名。
在这个例子的第二行 127.0.1.1 IP 地址也许不会在其它类 Unix 系统发现。Debian Installer 为没有永久 IP 地址的系统创建这个条目,作为某些软件(如 GNOME)的一个变通方法。
- 对于有永久 IP 地址的系统,这个永久 IP 地址应当代替这里的 127.0.1.1。
- 对于有永久 IP 地址和有 域名系统 Domain Name System (DNS)提供完全资格域名 fully qualified domain name (FQDN) 的系统,规范名 host_name.domain_name 应当被用来代替 host_name.
如果 resolvconf 软件包没有安装,”/etc/resolv.conf” 是一个静态文件。如果安装了,它是一个符号链接。此外,它包含有解析策略的初始化信息。如 DNS 是 IP=”192.168.11.1″,则包含如下。
nameserver 192.168.11.1
resolvconf 软件包使这个 “/etc/resolv.conf” 文件成为一个符号链接,并通过钩子脚本自动管理其内容。
对于典型的 adhoc 局域网环境中的 PC 工作站,除了基本的文件和 dns 方法外,还可以通过组播 DNS (mDNS) 解析主机名。
- Avahi 提供 Debian 下的组播 DNS 发现框架;
- 它和 Apple Bonjour / Apple Rendezvous 相当;
- libnss-mdns 插件包提供 mDNS 的主机名解析,GNU C 库 (glibc)的 GNU 名字服务转换 Name Service Switch (NSS) 功能支持 mDNS;
- /etc/nsswitch.conf “文件中应包含类似 “hosts: files mdns4_minimal [NOTFOUND=return] dns”的说明。使用 IPv4 地址 “224.0.0.251 “或 IPv6 地址 “FF02::FB “在多播 UDP 数据包中发送 mDNS 查询消息,即可解析后缀为”.local “伪顶级域的主机名。
注意:
- 域名系统 Domain Name System 中的扩展通用顶级域名 expansion of generic Top-Level Domains (gTLD) 还在进行中。在局域网内,选择一个域名时,请提防名字冲突 name collision;
- 使用 libnss-resolve 和 systemd-resolved、libnss-myhostname 或 libnss-mymachine 等软件包,并在”/etc/nswitch.conf “文件的 “hosts “行中列出 coressponding 列表,可以覆盖上文讨论的传统网络配置。
2、网络接口名称
systemd 使用”enp0s25″ 之类的 “可预测网络接口名称”。
3、局域网网络地址范围
让我们重新提醒下在 rfc1918 里规定的局域网 local area networks (LANs)IPv4 32 位地址在各类地址的保留范围. 这些地址保证不会与因特网上专有的地址冲突。
注意:IP 地址书写中有冒号的是 IPv6 地址,例如,”::1″ 是 localhost 本地主机。
网络地址范围列表:
类别 | 网络地址 | 子网掩码 | 子网掩码/位数 | 子网数 |
---|---|---|---|---|
A | 10.x.x.x | 255.0.0.0 | /8 | 1 |
B | 172.16.x.x — 172.31.x.x | 255.255.0.0 | /16 | 16 |
C | 192.168.0.x — 192.168.255.x | 255.255.255.0 | /24 | 256 |
注意:如果这些地址分配到一个主机,那么这个主机一定不能够直接访问互联网,必须通过一个作为网关的代理服务或通过 网络地址转换 Network Address Translation (NAT). 消费局域网环境,宽带路由器通常使用 NAT。
4、网络设备支持
尽管 Debian 系统支持大多数硬件设备,但依旧有一些网络设备需要 DFSG non-free 固件来支持它们。
二、现代的桌面网络配置
对于使用 systemd 的现代 Debian 桌面系统,网络接口通常由两个服务进行初始化:lo 接口通常在“networking.service”处理,而其它接口则由“NetworkManager.service”处理。
Debian 可以通过后台守护进程(daemon)管理软件来管理网络连接,例如 NetworkManager (NM)(network-manager 和相关软件包)。
- 它们有自己的 GUI 和命令行程序来作为用户界面;
- 它们有自己的后台守护进程(daemon)作为它们的系统后端;
- 它们使你可以简单地将系统连接到网络;
- 它们使你可以简单地管理有线和无线网络的配置;
- 它们允许你配置网络而不依赖传统的 ifupdown 软件包。
注意:不要在服务器上使用这些自动网络配置工具。它们主要针对于笔记本电脑上的移动桌面用户。
这些现代的网络配置工具需要进行适当的配置,以避免与传统 ifupdown 软件包发生冲突,它的配置文件位于 “/etc/network/interfaces”。
1、图形界面的网络配置工具
Debian 系统 NM 的官方文档位于 “/usr/share/doc/network-manager/README.Debian” 。本质上,如下操作即可完成桌面的网络配置。
通过下列命令使桌面用户 foo 归属 “netdev” 组(另外,例如 GNOME 和 KDE 这样的现代桌面环境会通过 D-bus 自动完成该操作)。
$ sudo usermod -a -G foo netdev
使 “/etc/network/interfaces” 的配置保持下面那样简洁。
auto lo iface lo inet loopback
通过下列命令重新启动 NM。
$ sudo systemctl restart network-manager
通过图形界面配置网络。
注意:
- 只有不列在 “/etc/network/interfaces” 中的接口会被 NM 管理,以避免与 ifupdown 的冲突;
- 如果你想扩展 NM 的网络配置功能,请寻找适当的插件模块和补充软件包,例如 network-manager-openconnect、network-manager-pptp-gnome、mobile-broadband-provider-info、gnome-bluetooth 等等。
三、没有图像界面
使用 systemd 的系统中,可以在 /etc/systemd/network/ 里配置网络。参见 systemd-resolved(8)、resolved.conf(5) 和 systemd-networkd(8)。这个允许在没有图像界面的情况下配置现代网络。
DHCP 客户端的配置可以通过创建 “/etc/systemd/network/dhcp.network” 文件来进行设置。例如:
[Match] Name=en* [Network] DHCP=yes
一个静态网络配置能够通过创建 “/etc/systemd/network/static.network” 来设置.比如:
[Match] Name=en* [Network] Address=192.168.0.15/24 Gateway=192.168.0.1
1、使用DHCP
可通过创建数据源文件”/etc/netplan/50-dhcp.yaml “来设置 DHCP 客户端配置:
network: version: 2 ethernets: all-en: match: name: "en*" dhcp4: true dhcp6: true
2、使用静态 IP 的现代云网络配置
可通过创建数据源文件”/etc/netplan/50-static.yml “来设置静态网络配置:
network: version: 2 ethernets: eth0: addresses: - 192.168.0.15/24 routes: - to: default via: 192.168.0.1
3、使用 Network Manger 的现代云网络配置
通过创建数据源文件”/etc/netplan/00-network-manager.yml”,可以使用 Network Manger 基础架构设置网络客户端配置:
network: version: 2 renderer: NetworkManager
四、底层网络配置
在 Linux 上的底层网络配置,使用 iproute2 程序 (ip(8), …) .
1、Iproute2 命令
Iproute2 命令集提供完整的底层网络配置能力。有个从旧的 net-tools 命令集到新的 iproute2 命令集的转换表。
从旧的 net-tools 命令集到新的 iproute2 命令集转换表:
旧的 net-tools | 新的 iproute2 | 操作 |
---|---|---|
ifconfig (8) |
ip addr |
一个设备上的协议(IP 或 IPv6)地址 |
route (8) |
ip route |
路由表条目 |
arp (8) |
ip neigh |
ARP 或 NDISC 缓存条目 |
ipmaddr |
ip maddr |
多播地址 |
iptunnel |
ip tunnel |
IP 隧道 |
nameif (8) |
ifrename (8) |
基于 MAC 地址的网络接口名 |
mii-tool (8) |
ethtool (8) |
以太网设备设置 |
2、安全的底层网络操作
可以按下面的方式安全的使用底层网络命令,这些命令不会改变网络配置。
底层网络命令列表:
命令 | 说明 |
---|---|
ip addr show |
显示活动的网络接口连接和地址状态 |
route -n |
用数字地址显示全部路由表 |
ip route show |
用数字地址显示全部路由表 |
arp |
显示当前 ARP 缓存表的内容 |
ip neigh |
显示当前 ARP 缓存表的内容 |
plog |
显示 ppp 后台守护进程(daemon)日志 |
ping yahoo.com |
检查到 “yahoo.com ” 的因特网连接 |
whois yahoo.com |
在域名数据库里面检查谁注册了 “yahoo.com “ |
traceroute yahoo.com |
跟踪到 “yahoo.com ” 的因特网连接 |
tracepath yahoo.com |
跟踪到 “yahoo.com ” 的因特网连接 |
mtr yahoo.com |
跟踪到 “yahoo.com ” 的因特网连接(重复的) |
dig [@dns-server.com] example.com [{a|mx|any}] |
查询由 “dns-server.com ” 提供服务的 “example.com ” 域名的 DNS 记录: “a “, “mx ” 或 “any ” 记录 |
iptables -L -n |
查看包过滤 |
netstat -a |
找出所有打开的端口 |
netstat -l --inet |
找出监听端口 |
netstat -ln --tcp |
找出 TCP 监听端口(数字的) |
dlint example.com |
查询 “example.com ” 的 DNS zone 信息 |
部分底层网络配置工具放在 “/usr/sbin/” 目录。你可以像 “/usr/sbin/ifconfig” 这样使用完整命令路径,或把 “/usr/sbin” 加到 “~/.bashrc” 文件列出的 “$PATH” 环境变量里 。