ssh 命令

开启端口转发配置

  • 修改 sshd 配置
    1
    2
    3
    4
    5
    6
    
    AllowTcpForwarding yes
    GatewayPorts yes
    X11Forwarding yes
    TCPKeepAlive yes
    ClientAliveInterval 60
    ClientAliveCountMax 3
    

ssh 转发用到的参数

  • -f 后台运行
  • -N 仅作端口转发,不执行任何命令
  • -g 绑定端口到全部网卡

本地定向转发

  • ssh-client 不可达 remote-host, ssh-server 可达 remote-host, ssh 隧道映射 ssh-client 指定端口到 remote-host 指定端口
  • 在 ssh-client 执行
    1
    2
    3
    
    ssh -f -N -g \
        -L [<ssh-client-ip>:]<port on ssh-client>:<remote-host>:<port on remote-host> \
        username@<ssh-server>
    

远程定向转发

  • ssh-client 可达 remote-host, ssh-server 不可达 remote-host, ssh 隧道映射 ssh-server 指定端口到 remote-host 指定端口
  • 在 ssh-client 执行
    1
    2
    3
    
    ssh -f -N -g \
        -R [<ssh-server-ip>:]<port on ssh-server>:<remote-host>:<port on remote-host> \
        username@<ssh-server>
    

动态转发

  • SOCKS5 代理
  • 在 ssh-client 执行
    1
    2
    3
    
    ssh -f -N -g \
        -D <port on ssh-client> \
        username@<ssh-server>
    

Ipv6 笔记

CentOS7 禁用 ipv6

方法1

  • 编辑 /etc/sysctl.conf,增加如下内容
    1
    2
    
    net.ipv6.conf.all.disable_ipv6 =1
    net.ipv6.conf.default.disable_ipv6 =1
    
  • 如果你想要为特定的网卡禁止IPv6,比如,对于enp0s3,添加下面的行
    1
    
    net.ipv6.conf.enp0s3.disable_ipv6 =1
    
  • 生效
    1
    
    sysctl -p
    

方法2

  • 执行下面命令
    1
    2
    
    echo 1>/proc/sys/net/ipv6/conf/all/disable_ipv6
    echo 1>/proc/sys/net/ipv6/conf/default/disable_ipv6
    

IP 地址分类及内网 IP

私有 IP

  • A类: 10.0.0.1-10.255.255.254
  • B类: 172.16.0.1-172.31.255.254
  • C类: 192.168.0.1-192.168.255.254

地址分类

  • A类: 一个A类IP地址仅使用第一个8位位组表示网络地址。剩下的3个8位位组表示主机地址。A类地址的第一个位总为0,这一点在数学上限制了A类地址的范围小于 127,127是64+32+16+8+4+2+1的和。最左边位表示128,在这里空缺。因此仅有127个可能的A类网络。A类地址后面的24位(3个点-十进制数)表示可能的主机地址,A类网络地址的范围从1.0.0.0到126.0.0.0。注意只有第一个8位位组表示网络地址,剩余的3个8位位组用于表示第一个8位位组所表示网络中惟一的主机地址,当用于描述网络时这些位置为0。注意技术上讲,127.0.0.0 也是一个A类地址,但是它已被保留作闭环(look back )测试之用而不能分配给一个网络。每一个A类地址能支持16777214个不同的主机地址,这个数是由2的24次方再减去2得到的。减2是必要的,因为 IP把全0保留为表示网络而全1表示网络内的广播地址。其中10.0.0.0 至10.255.255.255保留,作为局域网地址使用。
  • B类: 设计B类地址的目的是支持中到大型的网络。B类网络地址范围从128.1.0.0到191.254.0.0。B 类地址蕴含的数学逻辑是相当简单的。一个B类IP地址使用两个8位位组表示网络号,另外两个8位位组表示主机号。B类地址的第1个8位位组的前两位总置为 10,剩下的6位既可以是0也可以是1,这样就限制其范围小于等于191,由128+32+16+8+4+2+1得到。最后的16位( 2个8位位组)标识可能的主机地址。每一个B类地址能支持64534 个惟一的主机地址,这个数由2的16次方减2得到。B类网络仅有16382个。其中172.16.0.0至172.31.255.255保留作为局域网地址使用。
  • C类: C类地址用于支持大量的小型网络。这类地址可以认为与A类地址正好相反。A类地址使用第一个8位位组表示网络号,剩下的3个表示主机号,而C类地址使用三个8位位组表示网络地址,仅用一个8位位组表示主机号。C类地址的前3位数为110,前两位和为192(128+64),这形成了C类地址空间的下界。第三位等于十进制数32,这一位为0限制了地址空间的上界。不能使用第三位限制了此8位位组的最大值为255-32等于223。因此C类网络地址范围从 192.0.1.0 至223.255.254.0。最后一个8位位组用于主机寻址。每一个C类地址理论上可支持最大256个主机地址(0~255),但是仅有254个可用,因为0和255不是有效的主机地址。可以有2097150个不同的C类网络地址。其中192.168.0.0至192.168.255.255保留作为局域网地址使用。
  • D类: D类地址用于在IP网络中的组播( multicasting ,又称为多目广播)。D类地址的前4位恒为1110 ,预置前3位为1意味着D类地址开始于128+64+32等于224。第4位为0意味着D类地址的最大值为128+64+32+8+4+2+1为239,因此D类地址空间的范围从224.0.0.0到239. 255. 255.254。
  • E类: E类地址保留作研究之用。因此Internet上没有可用的E类地址。E类地址的前4位恒为1,因此有效的地址范围从240.0.0.0 至255.255.255.255。
  • 总的来说,ip地址分类由第一个八位组的值来确定。任何一个0到127 间的网络地址均是一个A类地址。任何一个128到191间的网络地址是一个B类地址。任何一个192到223 间的网络地址是一个C类地址。任何一个第一个八位组在224到239 间的网络地址是一个组播地址即D类地址。E类保留。

特殊 IP

  • 127.0.0.0: 127是一个保留地址,该地址是指电脑本身,主要作用是预留下作为测试使用,用于网络软件测试以及本地机进程间通 信。在Windows系统下,该地址还有一个别名叫“localhost”,无论是哪个程序,一旦使用该地址发送数据,协议软件会立即返回,不进行任何网 络传输,除非出错,包含该网络号的分组是不能够出现在任何网络上的。
  • 10.x.x.x、172.16.x.x~172.31.x.x、192.168.x.x: 私有地址,这些地址被大量用于企业内部网络中。一些宽带路由器,也往往使用192.168.1.1作为缺省地址。私有网络由于不与外部互连,因而可能使 用随意的IP地址。保留这样的地址供其使用是为了避免以后接入公网时引起地址混乱。使用私有地址的私有网络在接入Internet时,要使用地址翻译 (nat),将私有地址翻译成公用合法地址。在Internet上,这类地址是不能出现的。
  • 0.0.0.0: 严格意义上来 说,0.0.0.0已经不是真正意义上的IP地址了。它表示的是这样一个集合,所有不清楚的主机和目的网络。这里的不清楚是指在本机的路由表里没有特定条 目指明如何到达。对本机来说,它就是一个收容所,所有不认识的三无人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统就会自动 产生一个目地址为0.0.0.0的缺省路由。若IP地址全为0,也就是0.0.0.0,则这个IP地址在IP数据报中只能用作源IP地址,这发生在当设备启动时但又不知道自己的IP地址情况下。在使 用DHCP分配IP地址的网络环境中,这样的地址是很常见的。用户主机为了获得一个可用的IP地址,就给DHCP服务器发送IP分组,并用这样的地址作为 源地址,目的地址为255.255.255.255(因为主机这时还不知道DHCP服务器的IP地址)。
  • 255.255.255.255: 受限制的广播地址,对本机来说,这个地址指本网段内(同一 个广播域)的所有主机,该地址用于主机配置过程中IP数据包的目的地址,这时主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也还不知道。在任 何情况下,路由器都会禁止转发目的地址为受限的广播地址的数据包,这样的数据包仅会出现在本地网络中。
  • 224.0.0.1: 组播地址,注意它和广播的区别。从224.0.0.0到239.255.255.255都是这样的地址。224.0.0.1特指所有主 机,224.0.0.2特指所有路由器。这样的地址多用于一些特定的程序以及多媒体程序。如果你的主机开启了IRDP(Internet路由发现协议,使 用组播功能)功能,那么你的主机路由表中应该有这样一条路由。
  • 169.254..: 如果你的主机使用了DHCP功能自动获 得一个IP地址,那么当你的DHCP服务器发生故障或响应时间太长而超出系统规定的一个时间,Windows系统会为你分配这样一个地址。如果你发现你的 主机IP地址是个诸如此类的地址,很不幸,十有八九是你的网络不能正常运行了。
  • 直接广播地址: 一个网络中的最后一个地址为直接广播地址,也就是HostID全为1的地址。主机使用这种地址把一个IP数据报发送到本地网段的所有设备上,路由器会转发这种数据报到特定网络上的所有主机。注意:这个地址在IP数据报中只能作为目的地址。另外,直接广播地址使一个网段中可分配给设备的地址数减少了1个
  • NetID为0的IP地址: 当某个主机向同一网段上的其他主机发送报文时就可以使用这样的地址,分组也不会被路由器转发。比如12.12.12.0/24这个网络中的一台主机12.12.12.2/24在与同一网络中的另一台主机12.12.12.8/24通信时,目的地址可以是0.0.0.8。

xargs 命令

基本使用

  • 把标准输入转换成命令行参数,传递给 xargs 后的命令使用
    1
    2
    3
    
    echo 'one two three' | xargs mkdir
    # 等于
    mkdir one two three
    
  • 默认命令 echo
    1
    2
    3
    
    seq 1 8 | xargs
    # 等于
    seq 1 8 | xargs echo
    
  • -d 指定分隔符,默认是换行和空格
    1
    
    echo -e "a\tb\tc" | xargs -d "\t" echo
    
  • -p 打印出要执行的命令,并询问用户是否执行
  • -t 打印出要执行的命令,直接执行
  • -0 指定 null 当作分隔符,一般用于分隔包含空格的字符串列表
    1
    
    find /path -type f -print0 | xargs -0 rm
    
  • -L 指定标准输入中的多少行作为一个参数
  • -n 一行中可能包含空格分隔的多项,该参数指定每次将多少项作为命令行参数
  • -I 指定每一项命令行参数的替代字符串
    1
    
    seq 1 8 | xargs -I PAT echo PAT
    
  • -P 指定同时使用多少个进程执行命令,默认只用一个,0 表示不限制
  • –show-limits 查看系统命令行缓冲上限

NetworKmanager

环境

  • CentOS8 已废弃 network.service, 推荐使用 NetworkManager

概念

  • 在NM里,有2个维度: 连接(connection)和设备(device),这是多对一的关系
  • 想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即 nmcli d可以看到的),就是NM纳管的
  • 可以为一个设备配置多个连接(即 nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件
  • 同一时刻,一个设备只能有一个连接活跃,可以通过 nmcli c up切换连接

配置连接

  • 状态
    • 活跃(带颜色字体):表示当前该connection生效
    • 非活跃(正常字体):表示当前该connection不生效
  • 创建 connection,配置静态 ip
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    nmcli c add \
        type ethernet \
        con-name ethX \
        ifname ethX \
        ipv4.addr 192.168.1.100/24 \
        ipv4.gateway 192.168.1.1 \
        ipv4.method manual \
        autoconnect yes
    # type ethernet:创建连接时候必须指定类型,类型有很多,可通过 "nmcli c add type -h" 看到
    # con-name ethX: 表示连接(connection)的名字,可任意定义,无需和网卡名相同
    # ifname ethX: 表示网卡名,这个 ethX 必须是在 nmcli d里能看到的
    # ipv4.addr: 指定一个或多个 ip 地址
    # ipv4.gateway: 网关
    # ipv4.method: 对应ifcfg文件内容的BOOTPROTO
    # ipv4.method 默认为auto,对应为BOOTPROTO=dhcp,这种时候如果指定ip,就可能导致网卡同时有dhcp分配的ip和静态ip
    # ipv4.method 设置为manual表示BOOTPROTO=none,即只有静态ip
    # 如果这是为ethX创建的第一个连接,则自动生效
    # 如果此时已有连接存在,则该连接不会自动生效,可以执行 nmcli c up ethX-test来切换生效
    # autoconnect: 开机后自动连接
    
  • 创建 connection,配置多个静态 ip
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    nmcli c add \
        type ethernet \
        con-name ethX-X \
        ifname ethX \
        ipv4.addr '192.168.1.100/24,192.10.0.3.100/25' \
        ipv4.routes '192.168.0.0/16 192.168.1.10,10.0.0.0/8 10.0.3.1' \
        ipv4.gateway 192.168.1.254 \
        ipv4.dns '8.8.8.8,4.4.4.4' \
        ipv4.method manual
    # ipv4.routes: 设置自定义路由
    # ipv4.dns: 设置 dns
    
  • 创建 connection,配置动态 ip
    1
    2
    3
    4
    5
    
    nmcli c add \
        type ethernet \
        con-name ethX \
        ifname ethX \
        ipv4.method auto
    
  • 修改 ip
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    # ethX 是 connection name,也可以指定 connection UUID
    
    # 直接替换
    nmcli c modify ethX \
        ipv4.addr '192.168.1.200/24'
    nmcli c up ethX
    # 通过nmcli c modify修改con-name,只会对应修改ifcfg文件中的NAME,而不会更改ifcfg文件名
    
    # 增加 ip
    nmcli c modify ethX \
        +ipv4.addr '192.168.2.200/24'
        +ipv4.routes '10.1.0.0/16 192.168.2.1'
    nmcli c up ethX
    
    # 删除 ip
    nmcli c modify ethX \
        -ipv4.addr '192.168.2.200/24'
        -ipv4.routes '10.1.0.0/16 192.168.2.1'
    nmcli c up ethX
    
  • 操作 connection
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    # ethX 是 connection name,也可以指定 connection UUID
    
    # 启动
    nmcli c up ethX
    
    # 停止
    nmcli c down ethX
    
    # 删除
    nmcli c delete ethX
    # 删除当前连接后,会自动选择同一个设备的其他连接来顶替生效
    
  • 查看 connection
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # ethX 是 connection name,也可以指定 connection UUID
    
    # 查看列表
    nmcli c show
    # 查看活动连接列表
    nmcli c show -a
    
    # 查看指定 connection 详细信息
    nmcli c show ethX
    
  • 重载配置但不立即生效
    1
    2
    3
    4
    5
    6
    
    # 重载全部 connection 的所有 ifcfg-xxxx 和 route-xxxx
    nmcli c reload
    
    # 重载指定 ifcfg-ethX 和 route-ethX
    nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX
    nmcli c load /etc/sysconfig/network-scripts/route-ethX
    
  • 重载配置并立即生效
    1
    2
    3
    4
    5
    6
    
    # ethXX 是 connection name,也可以指定 connection UUID
    nmcli c up ethXX
    
    # ethX 是 device name
    nmcli d reapply ethX
    nmcli d connect ethX
    

配置网卡设备

  • 状态
    • connected: 已被NM纳管,并且当前有活跃的connection
    • disconnected: 已被NM纳管,但是当前没有活跃的connection
    • unmanaged: 未被NM纳管
    • unavailable: 不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set ethX down)
  • 查看网卡列表
    1
    2
    3
    4
    
    nmcli d
    
    # 查看全部网卡的详细信息
    nmcli d show
    
  • 操作网卡
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    # ethX 是 device name
    
    # 设置 nm 管理网卡 ethX
    # 并刷新该网卡对应的活跃 connection(如果之前有修改过connection配置)
    # 如果有connection但是都处于非活跃状态,则自动选择一个connection并将其活跃
    # 如果没有connection,则自动生成一个并将其活跃
    nmcli d connect ethX
    
    # 设置 nm 不管理网卡 ethX
    # 此操作不会变更实际网卡的link状态,只会使对应的connection变成非活跃
    # 若重启系统则又会自动connect
    # 另外,如果手工将该网卡的connection全部删掉,该网卡状态也会自动变为disconnected
    nmcli d disconnect ethX
    
    # 设置 nm 是否自动启动网卡
    nmcli d set ethX autoconnect yes|no
    # 设置 nm 是否自动管理网卡
    nmcli d set ethX managed yes|no
    
  • 关闭无线网络(默认启动)
    1
    
    nmcli r all off
    

NM 状态

  • 查看当前 nm 连接信息
    1
    
    nmcli
    
  • 查看当前 nm 全部状态
    1
    
    nmcli general status
    
  • 纳管状态
    1
    2
    3
    4
    5
    6
    
    # 查看
    nmcli n
    # 开启
    nmcli n on
    # 关闭
    nmcli n off
    
  • 查看 nm 当前是否在线可用
    1
    
    nm-oncline
    

注意事项

  • 如果希望NM不要纳管网卡,只有一个办法最彻底最靠谱,就是自己写ifcfg,内容加上 NM_CONTROLLED=no,这样该device的状态就会始终保持unmanaged。nmcli c up、nmcli c reload、nmcil c load都不会对其起任何作用
  • NM只能对link状态为up的网卡进行操作,如果手动 ip link set ethX down,那么NM就无法对该网卡做任何操作(即使nmcli d connect也没有用)
  • NetworkManager支持3种获取dhcp的方式:dhclient、dhcpcd、internal,当/etc/NetworkManager/NetworkManager.conf配置文件中的[main]部分没配置 dhcp=时候,默认使用internal(rhel7/centos7默认是dhclient)。internal是NM内部实现的dhcp客户端
  • NM默认会从dhcp里获取dns信息,并修改/etc/resolv.conf,如果不想让NM管理/etc/resolv.conf,则只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加 dns=none即可
  • 如果想让NM不要自动管理新网卡(比如不要给新网卡获取ip地址),则只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加 no-auto-default=* 即可,改完后通过 systemctl restart NetworkManager 或者重启系统来生效