[步骤] Linux 网络的设置 (禁用 IPv6) (openSUSE & SLES 版)

内容一:显示 IPv6 是否启用

1.1 方法一:通过 ifconfig 命令实现

# ifconfig

1.2 方法二:通过 ip 命令实现

# ip a s

(补充:如果出现了 inet6 则 IPv6 是激活的)

1.3 方法三:通过 sysctl -a 命令实现

# sysctl -a | grep -i ipv6|grep -i disable
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.conf.eth1.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

(补充:从输出结果中可以看出 IPv6 已经被禁用)

内容二:临时禁用 IPv6

2.1 临时禁用本地所有的 IPv6

# sysctl -w net.ipv6.conf.all.disable_ipv6=1

(补充:系统或者网卡重启后禁用失效)

2.2 临时禁用某 1 张网卡的 IPv6

# sudo echo 1 > /proc/sys/net/ipv6/conf/ens32/disable_ipv6 


补充:
1) 这里的 ens32 是要禁用 IPv6 的网卡名称
2) 系统或者网卡重启后禁用失效

内容三:永久禁用 IPv6

# yast lan

Global Options –> IPv6 Protocol Settings –> 取消勾选 IPv6

[排错] openSUSE & SLES 解决开机后 wicked 不能设置 IP 地址

报错代码:

开机后 wicked 不能自动设置 IP 地址

# cat /var/log/messages
......
...... wickedd-nanny[1218]: device eth0: call to org.opensuse.Network.Protocol.IPv6.changeProtocol() failed: General failure
...... wickedd-nanny[1218]: eth0: failed to bring up device, still continuing
......
...... lo              up
...... eth0            device-not-running
...... Finished wicked managed network interfaces.
......

解决方法一:将 wicked 软件降级到较低版本

(步骤略)

解决方法二:取消 ipv6.disable=1 参数

2.1 修改 /etc/default/grub 文件

# /etc/default/grub

删除以下内容:

......
......ipv6.disable=1......
......

2.2 使刚刚修改的配置生效

# grub2-mkconfig -o /boot/grub2/grub.cfg

2.3 检查刚刚设置的配置

# grep "^\s*ipv6.disable" /boot/grub2/grub.cfg

[命令] Linux 命令 strace 的使用 (用于确认某个端口是在哪里被阻挡了)

步骤一:使用 strace 命令

# strace -fvttTyy -s 4096 -o /tmp/strace_${HOSTNAME}.log mtr -TP 443 -nrc 300 1.1.1.1

或者:

# strace --follow-forks --no-abbrev --absolute-timestamps=[time,]us --syscall-times --decode-fds=all --string-limit=4096 --output=/tmp/strace_${HOSTNAME}.log mtr -TP 443 -nrc 300 1.1.1.1

(
补充:
1) -f 或者 –follow-forks,跟随交叉
2) -v 或者 –no-abbrev,输出结果不进行缩写
3) -tt 或者 –absolute-timestamps=[time,]us,显示绝对时间的时间戳
4) -T 或者 –syscall-times,显示系统的时间
5) -yy 或者 –decode-fds=all,显示除路径外和文件描述相关的所有信息
6) -s 或者 –string-limit=,后面接数字,限制输出结果中每个字符串的长度,默认为 32
7) -o 或者 –output,后面接文件名,输出结果会导入到这个文件里
8) mtr -TP 443 -nrc 300 1.1.1.1 是要被追踪的命令
9) 这里以查询为访问 1.1.1.1 的 443 端口 300 次而新启动的本地端口在哪里被阻止了,且显示结果的字符串长度为 4096 个字节为例

步骤二:通过 strace 命令分析问题

2.1 查看 strace 命令的输出结果

# cat /tmp/strace_${HOSTNAME}.log | grep 'Address already in use'
3205000 09:30:00.240588 bind(5<TCP:[132224925]>, {sa_family=AF_INET, sin_port=htons(34005), sin_addr=inet_addr("192.168.0.1")}, 16) = -1 EADDRINUSE (Address already in use) <0.000045>


补充:
1) 这里以搜索报错 ‘Address already in use’ 为例
2) 从输出结果可以看出,使其报错的端口时 34005

2.2 通过 ss 命令查找造成报错的端口正在被哪个 PID 占用

# ss -ntulap | grep 34005
tcp   ESTAB      0      0      192.168.1.1:34005  1.1.1.1:49666 users:(("xxxx",pid=1555,fd=284)) 

(补充:这里可以看出造成报错的端口正在被 PID 1555 占用)

2.3 通过 ps 命令查找造成报错的端口正在被哪个程序或进程占用

# ps -aux | grep 34005