ubuntu16.04 设置静态ip

ubuntu16.04 网卡命名

       在给ubuntu的有线网卡或者无线网卡设置静态ip之前,首先我们需要了解有关网卡命名的知识。

       在unbuntu16.04之后,ifconfig会发现网卡名eth0变成了enp2s0,wlan0变成了enp3s0或者类似的名称。

这种改变可以参考Predictable Network Interface Names.

网卡命名更换的原因如文中所说:

内核应用的网络接口的经典命名方案是简单地将由“eth0”,“eth1”开头的名称分配给驱动程序探测到的所有接口。由于驱动程序探测通常对于现代技术来说是不可预测的,这意味着只要多个网络接口可用,名称“eth0”,“eth1”等的分配通常不再是固定的,并且很可能发生“ eth0“在一次启动时最终成为”eth1“。这可能具有严重的安全隐患,例如在为某些命名方案编码的防火墙规则中,因此对不可预知的更改名称非常敏感。

为了解决这个问题,已经提出并实施了多种解决方案。 udev在较长时间内支持根据其MAC地址为特定接口分配永久“ethX”名称。事实证明,这有许多问题:这需要一个通常不可用的可写根目录;由于在系统上引导OS映像会导致系统的无状态丢失,导致映像配置发生变化;在很多系统上,MAC地址并没有实际的固定,比如在很多嵌入式硬件上,特别是在各种虚拟化解决方案上。然而,最重要的是,用户空间组件尝试分配接口名称,与内核分配来自同一个“ethX”名称空间的新名称,这是一种具有各种奇怪效果的竞态条件,其中名称分配有时失败。因此,在此之前已经从systemd / udev中删除了对此的支持。

另一个已经实现的解决方案是“biosdevname”,它尝试在某些固件接口中查找固定插槽拓扑信息,并使用它们将固定名称分配给包含其在主板上的物理位置的接口。在某种程度上,这种命名方案类似于通过/ dev / * / by-path / symlinks为各种设备节点在udev中本地完成的命名方案。在许多情况下,biosdevname不同于udev通常用于这些符号链接的低级内核设备标识方案,而是发明自己的枚举方案。

最后,许多发行版都支持将用户选择的名称重新命名为接口(认为:“internet0”,“dmz0”,...),将其MAC地址或物理位置作为其网络脚本的一部分。这是一个非常好的选择,但确实存在这样的问题,即它意味着用户愿意并且能够选择和分配这些名称。

我们认为推广“biosdevname”开创的方案是一个很好的默认选择。根据固件/拓扑/位置信息分配固定名称具有很大的优点,即名称是完全自动的,完全可预测的,即使添加或移除硬件(即不发生重新枚举),它们仍保持固定,并且可以替换损坏的硬件无缝连接。尽管如此,他们承认有时比每个人都习惯的“eth0”或“wlan0”更难阅读。例如:“enp5s0”

 网卡命名的规则

在udev-builtin-net_id   中还提到了网卡的新命名规则

/*
 * Two character prefixes based on the type of interface:
 *   en — Ethernet
 *   sl — serial line IP (slip)
 *   wl — wlan
 *   ww — wwan
 *
 * Type of names:
 *   b                             — BCMA bus core number
 *   c                             — CCW bus group name, without leading zeros [s390]
 *   o[d]                 — on-board device index number
 *   s[f][d]     — hotplug slot index number
 *   x                                — MAC address
 *   [P]ps[f][d]
 *                                         — PCI geographical location
 *   [P]ps[f][u][..][c][i]
 *                                         — USB port number chain
 */

上面一段是systemd源码的注释,意思是:

  1. en代表以太网卡

  2. p3s0代表PCI接口的物理位置为(3, 0), 其中横座标代表bus,纵座标代表slot

给网卡设置静态ip

       使用ifconfig命令,我们能看到以下有三个网卡的信息。

enp2s0    Link encap:以太网  硬件地址 20:1a:06:be:7b:ec  
          inet 地址:10.10.15.172  广播:10.10.15.255  掩码:255.255.255.0
          inet6 地址: fe80::102c:6a2e:d483:1fe9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:8377 错误:0 丢弃:39 过载:0 帧数:0
          发送数据包:3808 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:3530723 (3.5 MB)  发送字节:510433 (510.4 KB)
          中断:16 

lo        Link encap:本地环回  
          inet 地址:127.0.0.1  掩码:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  跃点数:1
          接收数据包:10307 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:10307 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:33424684 (33.4 MB)  发送字节:33424684 (33.4 MB)

wlp3s0    Link encap:以太网  硬件地址 48:5a:b6:d7:2a:f3  
          UP BROADCAST MULTICAST  MTU:1500  跃点数:1
          接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:0 (0.0 B)  发送字节:0 (0.0 B)
          中断:17 

这三个网卡分别代表了有线网卡、本地环回和无线网卡。区分是有线网卡还是无线网卡,只需校验在使用网线连接时,哪个网卡有ip地址信息,有即为有线网卡。或者在使用wifi连接时,哪个网卡有ip地址信息,有即为无线网卡。

以下以给有线网卡enp2s0设置静态ip为例:

打开一个终端,在超级用户下使用如下命令:

vim /etc/network/interfaces

然后编辑网络的配置命令,先将原先的命令注释掉,然后添加新的命令:

#auto lo

#iface lo inet loopback

上面的注释之后,添加一下:

auto enp2s0
iface enp2s0 inet static
address 10.10.15.172
netmask 255.255.255.0
gateway 10.10.15.1
broadcast 10.10.15.255
dns-nameserver 223.5.5.5



其中需注意的是:

1、网关地址要根据自己的局域网来填写,每个人的都不一样。

可以用ip route show命令查看自己的网关地址

default via 10.10.15.1 dev enp2s0  proto static  metric 100 
10.10.15.0/24 dev enp2s0  proto kernel  scope link  src 10.10.15.172  metric 100 
169.254.0.0/16 dev enp2s0  scope link  metric 1000 

由上可知,10.10.15.1为我的网关地址。

2、dns-nameserver尽量选择知名度较高的公共dns

 可以在公共dns哪家强-知乎 选择你喜欢的公共dns

 设置完重启电脑后,/etc/resolv.conf 文件中会自动添加 nameserver  223.5.5.5

参考:ubuntu linux设置静态ip的方法

给无线网卡设置静态ip

Wireless network configuration

wireless device driver

首先需要确保无线网卡驱动已安装,并且工作正常。

启动的的时候,udev会识别硬件,并加载相应的驱动。
有些芯片需要额外的firmware, 默认安装的linux-firmware提供了很多固件。

检查设备状态:

lspci -k 或者 lspci -v
检查设备驱动是否已经加载

例如:


1
2
3
4

05:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8723BE PCIe Wireless Network Adapter
Subsystem: Lenovo Device b728
Kernel driver in use: rtl8723be
Kernel modules: rtl8723be

通过ip link 查看设备, 无线设备通常是wlp5s0这样的名称。

启用设备:

ip link set <设备名> up

如果设备加载正常,接口正常启用,则说明不需要安装额外的firmware.
如果显示错误信息: “SIOCSIFFLAGS: No such file or directory”, 那说明缺失firmware

查看已加载的firmware的kernel message信息


1
2

$ dmesg | grep firmware
[ 11.644190] Using firmware rtlwifi/rtl8723befw.bin

install driver/firmware:

Linux支持的无线网卡驱动

Linux Wi-Fi设备ID列表

RTL Wi-Fi的git地址: https://github.com/lwfinger/rtlwifi_new.git

manage the wireless connections

管理方法 接口激活 无线连接管理 IP地址分配
手动设置 (无加密,或者WEP加密) ip iw ip/dhcpd/dhclient/networkd
手动设置 (WAP/WAP2 PSK加密) ip iw + wpa_supplicant ip/dhcpd/dhclient
自动管理   netctl, Wicd, NetworkManger等

Just like other network interfaces, the wireless ones are controlled with ip from the iproute2 package

管理无线网络连接还需要安装一些软件包:

iw
只支持nl80211(netlink)标准, 不支持老的WEXT(Wireless EXTentions)标准, 如果iw没有显示网卡,可能是这个原因

wireless_tools
已经过时,但是依然广泛使用。 WEXT设备使用此工具

wpa_supplicant
提供WPA/WPA2加密支持,同时支持nl80211和WEXT

interface activation

在使用iw或者wireless_tools之前,有些网卡需要激活内核接口

$ ip link set wlp5s0 up

验证接口是否已经打开:


1
2
3

$ ip link show wlp5s0
3: wlp5s0: mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff


UP表示接口已经打开

iw usage

iw只能连接开放网络或者WEP网络.

示例中的wireless device interface是wlp5s0
your_essid 是要连接的热点ssid

获取接口名


1
2
3
4
5
6
7
8

$ iw dev
phy#0
Interface wlp5s0
ifindex 3
wdev 0x1
addr 12:34:56:78:9a:bc
type managed
channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
iw command Description
iw dev wlp5s0 link 获取连接状态
iw dev wlp5s0 scan 扫描可用热点
iw dev wlp5s0 set type ibss 设置操作模式为ad-hoc
iw dev wlp5s0 connect your_essid 连接到开放网络
iw dev wlp5s0 connect your_essid 2432 连接到开放网络的指定通道
iw dev wlp5s0 set power_save on 启用省电模式

连接到WEP加密的网络

WEP的密码长度是固定的, key的格式如下:


1
2
3
4
5
6

[d:]index:data
'd:' means default (transmit) key
'index:' is a single digit (0-3)
'data' must be 5 or 13 ascii chars
or 10 or 26 hex digits
for example: d:2:6162636465 is the same as d:2:abcde

查看连接状态


1
2
3
4
5
6
7
8
9
10
11
12

$ iw dev wlp5s0 link
Connected to 7c:7d:3d:73:e6:03 (on wlp5s0)
SSID: MyESSID
freq: 2437
RX: 1256767 bytes (11788 packets)
TX: 4568 bytes (47 packets)
signal: -8 dBm
tx bitrate: 7.2 MBit/s MCS 0 short GI
bss flags: short-preamble short-slot-time
dtim period: 2
beacon int: 100

获取统计数据


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

$ iw dev wlp5s0 station dump
Station 12:34:56:78:9a:bc (on wlp5s0)
inactive time: 7813 ms
rx bytes: 1456449
rx packets: 13661
tx bytes: 4568
tx packets: 47
tx retries: 0
tx failed: 0
signal: -10 dBm
signal avg: -11 dBm
tx bitrate: 7.2 MBit/s MCS 0 short GI
rx bitrate: 1.0 MBit/s
authorized: yes
authenticated: yes
preamble: long
WMM/WME: yes
MFP: no
TDLS peer: no

你可能感兴趣的:(linux)