欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线
常用的网络配置工具
Linux 里常用的网络配置工具有net-tools,iproute2,ethtool包。 ubuntu下可以使用apt-get 来安装。
apt-get install net-tools
apt-get install iproute2
apt-get install ethtool
iproute2比net-tools更强大,并且可以替代net-tools。但很多老用户习惯使用net-tools。
下表是net-tools和iproute2常用的命令对比。用户可以根据喜好选择一个。
net-tools command | iproute commands |
arp -a | ip neigh |
arp -v | ip -s neigh |
arp -s 192.168.1.1 1:2:3:4:5:6 | ip neigh add 192.168.1.1 lladdr 1:2:3:4:5:6 dev eth1 |
arp -i eth1 -d 192.168.1.1 | ip neigh del 192.168.1.1 dev eth1 |
ifconfig -a | ip addr |
ifconfig eth0 down | ip link set eth0 down |
ifconfig eth0 up | ip link set eth0 up |
ifconfig eth0 192.168.1.1 | ip addr add 192.168.1.1/24 dev eth0 |
ifconfig eth0 netmask 255.255.255.0 | ip addr add 192.168.1.1/24 dev eth0 |
ifconfig eth0 mtu 9000 | ip link set eth0 mtu 9000 |
ifconfig eth0:0 192.168.1.2 | ip addr add 192.168.1.2/24 dev eth0 |
netstat | ss |
netstat -neopa | ss -neopa |
netstat -g | ip maddr |
route | ip route |
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0 i | ip route add 192.168.1.0/24 dev eth0 |
route add default gw 192.168.1.1 | ip route add default via 192.168.1.1 |
常用的网络配置操作
下面我们介绍一下linux里常用的网络操作。
ARP
在network协议中,arp是用来将ip地址转换成mac地址的。在app发包时,网络会先去查本机的arp表里有没有这个转换,如果没有,则向网络广播arp 请求,拥有这个ip的host则发送响应,告知其mac地址。本机网络栈接到响应后,会记录这条转换表到本机的ARP表中。
- 查看ARP表:
$ ip neigh
$ arp 或 arp -a # 附加参数 -n 来显示IP 而不是域名
- 增加一条新ARP条目
$arp -s 10.157.22.3 00:00:00:bb:cc:cc -i enp0s25
$ip neigh add 10.157.22.3 dev enp0s25 lladdr 00:00:00:bb:cc:cc
- 删除一条ARP条目:
$arp -d -i enp0s25 10.157.22.3
$ip neigh del dev enp0s25 10.157.22.3
Route
当我们的设备有多个网口时,linux网络协议栈就得需要知道要发送的IP包需要送到那个网口上。route 表就是用来做这个决断的。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.193.20.254 0.0.0.0 UG 100 0 0 enp0s25
10.193.20.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s25
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
上面显示的是我主机的路由表。在我主机上有两个网口,eth0 和 enp0s25, 分别属于不同的局域网。根据上面的路由表,当我发送目的ip为192.168.1.8 的包时,则网络协议栈将目的ip 192.168.1.8 与 路由表中每一个条目的netmask 相与,然后与路由表条目中相应的Destination ip 比较是否相同。由最后一条路由信息可知,我们的目的ip为192.168.1.8 的包应该发送给eth0。同理我们发送10.193.20.9 的包包将通过enp0s25 接口发送。当所有的路由表都没有匹配到时,则发送给网关。上面的路由表中的第一条就是默认的网关。从中可以看到所有未匹配到的包将通过enp0s25 接口发送。
- 查看路由表:
$ netstat -h
$ route 或 route -n
$ ip route
- 增加一条route:
$ route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.193.20.254 dev eth0
$ ip route add 192.168.1.0/24 via 10.193.20.254 dev eth0
如果局域网192.168.1.0/24 是网口eth0所在的子网,则不需要通过gw或via设置gateway参数。或指定gateway为0.0.0.0。
- 增加缺省的网关:
$ route add default gw 192.168.1.254 dev eth0
$ ip route add/replace default via 192.168.1.254 dev eth0
- 删除一条route:
$ route del -net 192.168.1.0 gw 192.168.178.1 netmask 0.0.0.0 gw 10.193.20.254 dev eth0
$ ip route del 192.168.1.0/24 via 10.193.20.254 dev eth0
网络配置示例
比如主机host有两个网口(eth0 和 eth1),并接入如下网络,我们为它手动设置路由表。
首先,Gateway1用来访问外网,所有非局域网10.193.20.0/24 ,192.168.1.0/24和 192.168.3.0/24的IP都应转发到这个Gateway, 由它来访Internet。所有我们增加一条默认网关的路由。
$ route add default gw 10.193.20.254 eth0
$ ip route add/replace default via 10.193.20.254 dev eth0
然后我们增加局域网10.193.20.0/24 的路由,因为我们访问局域网10.193.20.0/24 网络内的IP是不需要经过Gateway的。所有设置路由表条目中的Gateway参数为0.0.0.0.
$ route add -net 10.193.20.0 netmask 255.255.255.0 gw 0.0.0.0 dev eth0
$ ip route add 10.193.20.0 /24 via 0.0.0.0 dev eth0
或者不加gw/via参数。
$ route add -net 10.193.20.0 netmask 255.255.255.0 dev eth0
$ ip route add 10.193.20.0 /24 dev eth0
同理我们增加局域网192.168.1.0/24的路由。
$ route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
$ ip route add 192.168.1.0/24 dev eth1
因为局域网192.168.3.0/24 是通过Gateway2 才能访问到的, 所以我们访问局域网10.193.20.3/24 网络内的IP必须发送到Gateway2上,由它在转发。
$ route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth1
$ ip route add 192.168.3.0 /24 via 192.168.1.254 dev eth1
这样,共四条路由条目就设置好了。