iproute2

网络协议学习笔记二

夙愿已清 提交于 2021-02-14 12:52:38
查看ip地址: 在 Windows 上是 ipconfig,在 Linux 上是 ifconfig 或者ip addr。 登录进入一个被裁剪过的非常小的 Linux 系统中,发现既没有 ifconfig 命令,也没有 ip addr 命令,你是不是感觉这个系统压根儿没法用?这个时候,你可以自行安装 net-tools 和 iproute2 这两个工具。当然,大多数时候这两个命令是系统自带的。 IP 地址被点分隔为四个部分,每个部分 8 个 bit,所以 IP 地址总共是 32 位。因为不够用,于是就有了 IPv6,这个有 128 位。 本来 32 位的 IP 地址就不够,还被分成了 5 类: 这里面有个尴尬的事情,就是 C 类地址能包含的最大主机数量实在太少了,只有 254 个。当时设计的时候恐怕没想到,现在估计一个网吧都不够用吧。而 B 类地址能包含的最大主机数量又太多了。6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。 于是有了一个折中的方式叫作 无类型域间选路 ,简称 CIDR 。这种方式打破了原来设计的几类地址的做法,将 32 位的 IP 地址一分为二,前面是 网络号 ,后面是 主机号 。从哪里分呢?你如果注意观察的话可以看到,10.100.122.2/24,这个 IP 地址中有一个斜杠,斜杠后面有个数字24。这种地址表示形式,就是CIDR

DHCP协议和PXE

亡梦爱人 提交于 2020-12-18 18:42:37
在学习IP地址基本概念之后,需要了解到如果需要和其他机器通讯,我们就需要一个通讯地址,我们需要给网卡配置一个地址。 如何配置 IP 地址? 可以用命令行自己配置一个地址。可以使用 ifconfig,也可以使用 ip addr。设置好了以后,用这两个命令,将网卡 up 一下,就可以开始工作了。 使用 net-tools: $ sudo ifconfig eth1 10.0.0.1/24 $ sudo ifconfig eth1 up 使用 iproute2: $ sudo ip addr add 10.0.0.1/24 dev eth1 $ sudo ip link set up eth1 配置客户端的IP地址我们需要用到DHCP和PXE: 概述: DHCP 协议:主要是用来给客户租用 IP 地址,和房产中介很像,要商谈、签约、续租,广播还不能“抢单”; PXE:DHCP 协议能给客户推荐“装修队”PXE,能够安装操作系统,这个在云计算领域大有用处。 ARP协议工作机制(链路层) 通过IP查找MAC地址需要用到ARP协议,如果目标ip地址和自己是一个网段,会直接在网段内进行广播,如果不是一个网段,则不会直接将包发送到网络上,而是企图将包发送到网关上。所以如果跨网段调用,且没配置网关,则包根 本发不出去。配置一个局域网主要需要配置CIDR、子网掩码、广播地址、网关地址。 DHCP

双网卡添加策略路由

天大地大妈咪最大 提交于 2020-10-25 12:33:12
vim /etc/iproute2/rt_tables 200 dstroute #添加 /etc/rc.local /sbin/ip route add 0.0.0.0/0.0.0.0 via 10.203.3.254 dev bond0 table dstroute /sbin/ip rule add from 10.203.3.0/24 table dstroute pref 32765 来源: oschina 链接: https://my.oschina.net/u/4368960/blog/4293867

Linux源进源出与iproute2

孤街醉人 提交于 2020-08-14 12:48:05
最近在给客户做解决方案的时候遇到这么一个场景也给自己埋了个坑这里记录一下。 具体需求如下 现在客户国内服务器和国外的防火墙已经内网打通 客户在国内有台WEB服务器要通过国外的一台防火墙访问外网 需要从国外防火墙上能够回源到国内的WEB服务器即能够通过防火墙访问到WEB服务的80端口 国内WEB服务器有自己的公网地址需要能够进行管理 因为一开始客户没有提出第3条要回源的需求当时给客户设计的方案是 把客户国内机器的默认路由扔给国外的防火墙 国外防火墙上做SNAT把来自内网网段的流量映射出去。 3. 在国内机器上添加静态路由把客户的管理网段扔给国内的网关。 大致拓扑图如下 这里有一点因为无法确定客户国内的管理地址网段所以在国内WEB服务器C上刷了一个全国路由表的静态路由默认路由优先级低于静态路由所以国内用户访问C的时候还是通过国内的网关出TCP连接能够正常建立。 然而这时候客户又提出需要从国外服务器上进行回源测试一下回源的质量也就是要通过防火墙访问到WEB服务的80端口。我心想这个简单呀在防火墙上做一个DNAT映射把访问防火墙80端口的映射给WEB服务器的80端口上。于是说干就干.....做完配置之后进行测试瞬间懵逼了我在办公网国内地址测试防火墙的80端口死活不通 一直报错"TIMEOUT"

Linux虚拟网络设备之bridge(桥)

为君一笑 提交于 2020-08-09 18:06:50
继前两篇介绍了 tun/tap 和 veth 之后,本篇将介绍Linux下常用的一种虚拟网络设备,那就是bridge(桥)。 本篇将通过实际的例子来一步一步解释bridge是如何工作的。 什么是bridge? 首先,bridge是一个虚拟网络设备,所以具有网络设备的特征,可以配置IP、MAC地址等;其次,bridge是一个虚拟交换机,和物理交换机有类似的功能。 对于普通的网络设备来说,只有两端,从一端进来的数据会从另一端出去,如物理网卡从外面网络中收到的数据会转发给内核协议栈,而从协议栈过来的数据会转发到外面的物理网络中。 而bridge不同,bridge有多个端口,数据可以从任何端口进来,进来之后从哪个口出去和物理交换机的原理差不多,要看mac地址。 创建bridge 我们先用iproute2创建一个bridge: dev@debian:~$ sudo ip link add name br0 type bridge dev@debian:~$ sudo ip link set br0 up 当刚创建一个bridge时,它是一个独立的网络设备,只有一个端口连着协议栈,其它的端口啥都没连,这样的bridge没有任何实际功能,如下图所示: +----------------------------------------------------------------+ | | |

redis主从复制数据延迟解决方案

有些话、适合烂在心里 提交于 2020-08-05 18:13:56
在 redis 主从复制模式下可能会出现 slave 延迟导致读写不一致的问题。 解决办法有2种 1. 修改从几点参数配置 从节点的 slave-serve-stale-data 参数也与此有关,它控制这种情况下从节点的表现 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式: 如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。 如果slave-serve-stale-data设置为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误”SYNC with master in progress”。 2. 编写外部监控程序 将主从模式更换为哨兵模式则无需自己去做监控 对于无法容忍大量延迟场景,可以编写外部监控程序监听主从节点的复制偏移量,当延迟较大时触发报警或者通知客户端避免读取延迟过高的从节点。 编写监控程序,然后定时执行 <?php /** * [监控 redis 主从复制偏移量:当监控到延迟高的节点时,移除延迟高的从节点, 即动态修改读写分离配置信息。(可以添加触发报警机制)] * [在做主从复制时推荐使用 redis 的哨兵模式,则无需自己去监控,哨兵模式能自己监控并切换主从] * * @Author leeprince:2020-05-05 10:29 */ define ( 'IS_DEBUG' ,

彻底征服Windows上OpenUOM客户端的源地址选择问题

南楼画角 提交于 2020-08-04 22:14:29
写于2013/08/07 一个问题困扰了我多年,相信也困扰了很多人多年!那就是Windows上使用OpenUOM时,通过隧道的包的源IP地址总是OpenUOM虚拟网卡网段的IP地址,由于Windows的路由选择是自动进行的,除非你在应用程序中bind一个地址,否则它选什么你用什么,配置路由时,你无法指定Linux的iproute2的src参数。因此只要是要通过TAP-Win32网卡走的包,其源地址均是TAP-Win32网卡上配置的虚拟IP地址!目前的解决方案有三种: 1.OpenUOM的2.3.0版本有NAT的配置选项: --client-nat snat|dnat network netmask alias 但是我不敢用,怕应用程序的校验码用到了原始IP信息; 2.可以用Windows的LSP来强制bind物理网卡的IP,但是我还是觉得不够完美; 3.在服务端做SNAT。然而为了WIndows客户端做定制,也不完美; 网络的问题就要网络自己解决,不要依赖太多上层的东西!虽然Windows网络不给力,但是想降伏它还是有办法的,大不了就搞NDIS啊!客户端自己的事情自己解决,别麻烦服务端,为了解决客户端的问题,在服务端加配置算什么事啊! 写在前面 这篇文章 描述了Windows选择源IP地址的详细过程,另外微软的文档中也有介绍,这里就不多说了。总之,不管是强主机模式还是弱主机模式

四 谁当网络大道 唯我 IP 担任

泄露秘密 提交于 2020-07-29 05:01:39
上回说到 ip 地址的一些基本信息,这回咱们来谈谈专业人士如何配置 IP ? Linux 使用如下两种命令: 使用 net-tools: $ sudo ifconfig eth1 10.3.0.1/24 $ sudo ifconfig eth1 up 使用 iproute2: $ sudo ip addr add 10.3.0.1/24 dev eth1 $ sudo ip link set up eth1 当然 IP 地址不是随心所欲的配置的,是遵守网络规则的。 如果两台直连的电脑,一台配置192.168.3.3,而另外一台配置17.32.16.9,按常理来说,两台电脑一根网线直连,肯定能通啊。可是现实是系统不会这么处理的。 系统现在知道源 IP 地址为 192.168.3.3,目标 IP 地址为17.32.16.9,这是个跨网段的操作,系统会将数据包发给网关,如果没有配置网关,自然包无法发送的,IP 地址为 192.168.3.3配置17.32.16.9为网关的话,系统不会通过的,因为网关肯定是和 IP 地址是同一个网段的。 故而 IP 地址配置是遵循不同组织的规则的,几乎都是CIDR、子网掩码、广播地址及网关地址组成。 动态主机配置协议,及我们熟知的DHCP 不同于数据中心的 IP 是静态地址,一般客户端都是自动获取的,灵活方便。 咱们探究一下客户端获取 IP 地址的完整流程

Linux bridge模块的一次重构(让bridge归bridge让eth0归eth0)

谁说我不能喝 提交于 2020-07-28 09:16:03
勾起了回忆,就想记录点什么。 再看刘经理的需求: 被bonding的eth0可以独立工作,eth0作为类似带内管理接口。 当然,现在看来,用macvlan实现这个非常容易: ip link add link eth0 man0 type macvlan brctl addbr br0 brctl addif br0 man0 brctl addif br0 eth1 ifconfig br0 1.1.1.1/8 up ifconfig man0 4.4.4.4/8 up OK,现在经理可以通过eth0来作为管理口访问管理地址4.4.4.4了,而eth0同时也和eth1一起作为br0的port存在。 但是如果不配置macvlan则何如? 我当年被告知不能变更 错误的配置脚本 ,因此我必须去适配类似下面的逻辑: brctl addbr br0 brctl addif br0 eth0 brctl addif br0 eth1 ifconfig br0 1.1.1.1/8 up ifconfig eth0 4.4.4.4/8 up 很明显,这个配置是错误的,eth0已经被br0给覆盖掉了,它作为br0的port不再对外可见,而且我也不能通过udev修改网卡的名字,总之就是系统的配置, 我不能动! 于是,我构建了超级复杂且不灵活的脚本化方案: 用arptables修改arp请求和回复。

Linux 操作系统原理 — 网络硬件卸载

你说的曾经没有我的故事 提交于 2020-05-05 15:52:13
目录 文章目录 目录 网络 Offload 交换 Offload 网络 Offload 网络 Offload,主要是指将原本在内核网络协议栈中进行的 IP 分片、TCP 分段、重组、checksum 校验等操作,转移到网卡硬件中进行,使得 CPU 的发包路径更短,消耗更低,从而提高处理性能。 一开始这些 Offload 功能都是在网卡上针对特定功能设计一个专门的电路并且带有很小的缓存,去做专门的事情。后来直接在网卡上部署一个可编程的通用的小型 CPU,一般称为 网络协处理器 ,就是现在的智能网卡。智能网卡的协处理器可以先对该数据包进行一些预处理,根据处理结果考虑是不是要把数据包发送给主机 CPU,智能网卡中的 Offload 功能一般是使用 eBPF 编程来实现的。 交换 Offload Linux 4.0 引入了 switchdev 框架,它代表对一类拥有 “交换” 能力芯片的多网口设备的抽象。其中每一个网口就是一个 Port,在 switchdev 框架中被注册成为一个 net_device。 switchdev 起源于 Open vSwitch 项目,由 Jiři Pirko 在 2014 年 9 月首次提出。在 2015 年 2 月的 Netdev 0.1 会议上,网络开发人员决定扩展并采用 switchdev 作为硬件交换机芯片的通用解决方案。switchdev