dukelec 发表于 2019-6-9 22:40:32

求助 Linux 大神,为啥明明对方在一个网段,自身却不让 ping?

我先抄下 vps 默认的 ubuntu 系统的网络配置:


然后切换到 gentoo 的 minimal iso 启动,默认是 dhcp 分配到错误的地址,ifconfig 改了之后还能 ping 通网关。
然后我清空错误的 route 表,然后添加 default gw, 报错:SIOCADDRT: Network is unreachable
此时,ping 网关也不通:


感觉系统认为 104.168.220.1 不属于 104.168.220.0/24 网段,这是什么情况呢?

Himem 发表于 2019-6-9 22:48:18

本帖最后由 Himem 于 2019-6-9 22:50 编辑

在默认ubuntu下能否ping通?
会不会是104.168.220.1本身的iptables策略问题

tcpdump抓包看看

Earthman 发表于 2019-6-9 22:55:44

0和255这两个地址是不能用的
另外也应该注意iptables,重新添加试试

dukelec 发表于 2019-6-9 22:59:51

本帖最后由 dukelec 于 2019-6-9 23:03 编辑

Himem 发表于 2019-6-9 22:48
在默认ubuntu下能否ping通?
会不会是104.168.220.1本身的iptables策略问题



ubuntu 下一切正常,iptables -L -n 全是空的

gentoo live-cd 看了下,iptables 相关内核驱动都没启用。应该跟 iptables 没关系。

不可能是 104.168.220.1 的策略问题,因为 104.168.220.88 上的错误的 route 没清之前,都是可以 ping 通的。

dukelec 发表于 2019-6-9 23:00:26

Earthman 发表于 2019-6-9 22:55
0和255这两个地址是不能用的
另外也应该注意iptables,重新添加试试

自身是 88,網關是 1,沒用到 0 和 255.
iptables 沒用到。

Himem 发表于 2019-6-9 23:05:23

dukelec 发表于 2019-6-9 22:59
ubuntu 下一切正常,iptables -L -n 全是空的

gentoo live-cd 看了下,iptables 相关内核驱动都没启用。 ...

还真是,route是空的
ifconfig eth0 104.168.220.88
先不关心掩码,再ping下试试?

dukelec 发表于 2019-6-9 23:16:50

本帖最后由 dukelec 于 2019-6-9 23:21 编辑

Himem 发表于 2019-6-9 23:05
还真是,route是空的
ifconfig eth0 104.168.220.88
先不关心掩码,再ping下试试? ...

这是我重新开了下 dhcp client的打印,要启动的时候去配置 ifconfig,这样 route 表不会空,用来对比第二张图,只清空 route 前后 ping 的区别:




另外,我有试过不加掩码和其它掩码,没区别。

Himem 发表于 2019-6-9 23:23:11

本帖最后由 Himem 于 2019-6-9 23:36 编辑

dukelec 发表于 2019-6-9 23:16
这是我重新开了下 dhcp client的打印,要启动的时候去配置 ifconfig,这样 route 表不会空,用来对比第 ...

我在虚拟机上复现了,清掉route表确实本地也会unreachable
route add -net 104.168.220.0 netmask 255.255.255.0 eth0
加回本地路由就好了

或者先清route表,后ifconfig改ip也可以避免这问题,ifconfig换给接口换ip时一般都会自动加本地route的

dukelec 发表于 2019-6-9 23:38:12

Himem 发表于 2019-6-9 23:23
我在虚拟机上复现了,清掉route表确实本地也会unreachable
route add -net 104.168.220.0 netmask 255.25 ...

我剛也發現了,之前一直以爲同網段不依賴路由表呢。
還是多謝了。

dukelec 发表于 2020-4-2 13:27:16

昨晚又遇到类似问题,不过这次是 IPv6,通宵研究才找到问题,记录一下。



同样是 Gentoo 系统的 VPS 就没问题:


最后找到问题在于:
fd44::1/128 这一条路由,如果不是在 ip -6 route list table local 列表中就会有问题,手动加入可以临时解决。
只升级了 NetworkManager 就好了,老版本错误的把 fd44::1/128 加入到非 local 的路由表了。
route -n -6 也可以查看路由是否为 local,Flag 为 Un 的才是 local,不过偶尔不准,还是建议用 ip 命令。

dukelec 发表于 2020-4-5 02:09:51

本帖最后由 dukelec 于 2020-4-5 02:34 编辑

又遇到一個神仙問題。。。

用這個命令添加 IP 地址之後
ip addr add fd44::4/64 dev wlan0

socket 編程無法綁定本地這個 IP,而另一個由路由分配的 2408:84f3.../64 的 IP 卻沒問題,同屬 wlan0。
duke@duke-pc ~ $ python
Python 3.7.7 (default, Apr2 2020, 04:03:01)
on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> soc = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
>>> soc.settimeout(1.0)
>>>
>>> soc.bind(('fd44::1', 0xcdcd))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: Cannot assign requested address
>>>

用以下命令臨時允許綁定非本地 IP 才能成功
echo 1 > /proc/sys/net/ipv6/ip_nonlocal_bind

所以非常奇怪,爲什麼明明是本地的 IP 被識別成非本地 IP?
先恢復成不允許綁定非本地 IP。

最後查到用 ip -6 addr 命令查到 fd44::1 地址有一個標誌 tentative,繼而查到這篇文章:
https://www.the-art-of-web.com/system/ipv6-dad-tentative/
按照文章所說,關閉 DAD 就好了。

但是,想想不應該啊,於是用 wireshark 開啓抓包,然後再添加 fd44::1 地址,竟然發現:
本機廣播:有沒有人用地址 fd44::1?沒有的話我就要用了啊。。。
熱點手機:我我我,我在用 fd44::1,我的 MAC 地址是……

換了一個 IP 試竟然還是一樣,adb 登錄手機看了一下,根本就沒有 fd 開頭的 ip 地址。。。
好吧,確認問題出在手機。。。
再次領悟到,網絡相關命令都用 ip 比較好,能及時發現問題。

wgainn 发表于 2020-4-10 10:38:50

如果没有特殊的用意, 绑定INADDR_ANY
bind(('::0', 0xcdcd))
页: [1]
查看完整版本: 求助 Linux 大神,为啥明明对方在一个网段,自身却不让 ping?