NotePublic/Software/System/Linux/Modules/Network/Linux_网络配置.md

11 KiB
Raw Blame History

Linux 网络配置

1. IP 配置

# 查看网络设备和地址信息
ip addr show
# 设定 IP 地址
ip addr add <ip addr> dev <netif>
# 删除 IP 地址
ip addr del <ip addr> dev <netif>

2. 路由表配置

简单来说,路由器就是一个公交站台,公交站台上面有很多路公交。每条线路公交车又有很多站台(路由器),你就会选择最近的一条公交出行方案,当然啦,站牌上面的路线是会经常更新,更新的事,有当地部门更新。这就是路由。一台电脑主机有路由表,路由器也有路由表,一般来说,一台主机电脑如果只有一个网卡的话,应该会有最少两条路由信息,一条是公网路由,一条是局域网路由(它是不会经过路由器的路由表的,因为它走的是链路层,所以可以解析我们在局域网内传数据,速度是很快的)。

一个典型的 Linux 路由表如下:

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.139.128.1    0.0.0.0         UG    0      0        0 eth0
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
10.139.128.0    0.0.0.0         255.255.224.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-0ab63c131848
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-bccbfb788da0
172.20.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-7485db25f958

各列字段说明如下:

含义
Destination 目标网络或目标主机。Destination 为 default0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是 10.139.128.1
Gateway 网关地址0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关
Genmask Destination 字段的网络掩码Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0
Flags 标记,含义参考表格后面的解释
Metric 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 不在Linux内核中使用。
Ref 路由项引用次数 不在Linux内核中使用。
Use 此路由项被路由软件查找的次数
Iface 网卡名字,例如 eth0

2.1. Linux 内核的路由种类

2.1.1. 主机路由

路由表中指向单个 IP 地址或主机名的路由记录,其 Flags 字段为 H。下面示例中对于 10.0.0.10 这个主机,通过网关 10.139.128.1 网关路由:

[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
...

2.1.2. 网络路由

主机可以到达的网络。下面示例中,对于 10.0.0.0/24 这个网络,通过网关 10.139.128.1 网关路由:

[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        10.139.128.1    255.255.255.0   UG    0      0        0 eth0

2.1.3. 默认路由

当目标主机的 IP 地址或网络不在路由表中时,数据包就被发送到默认路由(默认网关)上。默认路由的 Destination 是 default 或 0.0.0.0。

[root@VM_139_74_centos ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    0      0        0 eth0

2.1.4. 网关路由

必须有一个能够到达网关的主机路由/网络路由才能访问网关,因此,如果想在路由表中使用网关,则需要先添加一个该网关的路由。

2.2. Route 命令

route 命令可以显示或设置 Linux 内核中的路由表,主要是静态路由。

对于局域网中的 Linux 主机,要想访问 Internet需要将局域网的网关 IP 地址设置为这个主机的默认路由。在命令行中通过 route 命令添加的路由在网卡重启或机器重启后失效。可以在 /etc/rc.local 中添加 route 命令来保证路由设置永久有效。

选项:

  • -A设置地址类型
  • -C打印 Linux 内核的路由缓存
  • -v显示详细信息
  • -n不执行 DNS 反向查找,直接显示数字形式的 IP 地址
  • -enetstat 格式显示路由表
  • -net到一个网络的路由表
  • -host到一个主机的路由表

参数:

  • add增加路由记录
  • del删除路由记录
  • target目的网络或目的主机
  • gw设置默认网关
  • mss设置TCP的最大区块长度MSS单位MB
  • window指定通过路由表的TCP连接的TCP窗口大小
  • dev路由记录所表示的网络接口

2.2.1. 添加路由 add

可以添加一条可用路由,或添加一条要屏蔽的路由。

2.2.1.1. 添加主机路由

添加主机路由时,需要指定网络 ID 和主机 ID此时需要设置 netmask 255.255.255.255

[root@VM_139_74_centos ~]# route add -net 10.0.0.10 netmask 255.255.255.255 gw 10.139.128.1 dev eth0
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
...
2.2.1.2. 添加网络路由

添加网络路由时,只需指定网络 ID通过 netmask 设置掩码长度:

[root@VM_139_74_centos ~]# route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.139.128.1 dev eth0
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        10.139.128.1    255.255.255.0   UG    0      0        0 eth0
...
2.2.1.3. 添加添加同一个局域网的主机

不指定 gw 选项时,添加的路由记录不使用网关:

[root@VM_139_74_centos ~]# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
224.0.0.0       0.0.0.0         240.0.0.0       U     0      0        0 eth0
...

2.2.2. 屏蔽路由

[root@VM_139_74_centos ~]# route add -net 224.0.0.0 netmask 240.0.0.0 reject
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
224.0.0.0       -               240.0.0.0       !     0      -        0 -
...

2.2.3. 删除路由记录

跟添加路由类似,可以删除一条可用路由,或删除一条屏蔽的路由。

2.2.3.1. 删除可用路由
route del -net 224.0.0.0 netmask 240.0.0.0
2.2.3.2. 删除屏蔽的路由
route del -net 224.0.0.0 netmask 240.0.0.0 reject

2.2.4. 删除和添加设置默认网关

添加或删除默认网关时Linux 会自动检查网关的可用性:

[root@VM_139_74_centos ~]# route add default gw 192.168.1.1
SIOCADDRT: Network is unreachable
[root@VM_139_74_centos ~]# route del default gw 192.168.1.1
SIOCDELRT: No such process

3. DNS 配置

/etc/resolv.conf 文件中包含了域名解析服务器配置信息,格式如下:

nameserver <name server addr>

修改完该文件后重启网络服务即可,例如:

sudo systemctl restart networking.service

一般而言,/etc/resolv.conf 文件是个软链接,其配置比较复杂,推荐使用 resolvconf 工具进行配置。

4. 桥接

# Create a new bridge and change its state to up
ip link add name <bridge name> type bridge
ip link set <bridge name> up
# 如果想通过网桥上网,则需要为网桥设定 IP 地址并重新设置默认路由
ip addr add <ip addr> dev <bridge name>
ip route replace default dev <bridge name>
# To add an interface (e.g. eth0) into the bridge, its state must be up
ip link set <netif> up
ip addr flush dev <netif>
ip link set <netif> master <bridge name>
# Show the existing bridges and associated interfaces
bridge -d link
# OR
brctl show
# 解除网桥绑定
ip link set <netif> nomaster
# 删除网桥对应的路由
ip route del default
# 删除网桥
ip link del name <bridge name> type bridge

5. 网速设置

# 自适应
ethtool -s <netIf> autoneg on
# 非自适应
ethtool -s <netIf> speed <speed> duplex <full/half> autoneg off
  • speed网卡速度设置,设置的网速分别为0 10(H,F)100(H,F)
  • duplex全双工/半双工
  • autoneg自适应开关

6. 命令行图形化配置

6.1. NetworkManager

需要启用 NetworkManager 服务

sudo systemctl start NetworkManager
# 或
sudo systemctl enable NetworkManager

然后使用 nmtui 配置网络服务:

sudo nmtui

7. Linux 通过 Windows 上网

7.1. 桥接双网卡

Windows 有双网卡,一个连接路由,一个连接 Linux桥接两个网卡后 Linux 直接访问路由器 DHCP 服务获取 IP 地址或访问网络Windows 和 Linux 相当于在同一个局域网下。

将 Windows 与 Linux 连接的网卡设置为自动 IP 地址,选定网卡与 Wifi 的 WLAN点击右键选择桥接。

桥接后 Windows 可能无法上网,此时需要重新连接 Wifi或者将网桥地址配置为有效的 Wifi 地址。

将 Linux 设定为固定 IP 地址,地址段与 Windows 的 WLAN 保持一致(如果 Windows 的 WLAN 地址为192.168.2.230,则将 Linux 设定为 192.168.2.200IP 地址不能与局域网中的其他设备重复,如不确定,可设置路由器中自动分配地址池以外的地址)

设置 Linux 的默认路由,并将:

nameserver 114.114.114.114

添加到 /etc/resolv.conf 文件中。

7.2. 共享上网

Windows 有双网卡,一个链接路由,一个链接 Linux将连接路由的网卡共享给 LinuxWindows 启动 DHCP 服务并作为网关工作Linux 工作在 Windows 创建的局域网下,通过 Windows 和 路由器 最终访问外网。

进入控制面板中的“网络链接”配置,右击需要共享给 Linux 的网络适配器,进入属性页面,勾选“允许其他网络用户通过此计算机的 Internet 连接来连接(N)”,并在“家庭网络连接”中选择连接了 Linux 的网络适配器,点击确认保存配置。

确认后,连接了 Linux 的网络适配器将被分配一个固定 IP 地址192.168.137.1,这是一个网关地址。

之后在 Linux 中配置自动获取 IP 地址或设置地址为192.168.137.x网关为192.168.137.1,路由至少要设置到 192.168.137.1 和到 Windows 所在网络的网关路由:

default via 192.168.0.1 dev usb0 proto static metric 100
default via 192.168.137.1 dev usb0 proto dhcp metric 100
169.254.0.0/16 dev usb0 scope link metric 1000
192.168.0.0/24 dev usb0 proto kernel scope link metric 100
192.168.137.0/24 dev usb0 proto kernel scope link metric 100

8. 内部参考关键字

  1. IPRoute2
  2. NetworkManager

9. 外部参考资料

  1. Linux 路由表详解及 route 命令详解