如题,公司一个长期运维的项目,有两个 IP 网段不同的集群,通过 nginx 做了反向代理,之前是正常的,最近突然有台虚机访问服务有问题了,查了一圈发现,用 IP 加端口可以通(临时开了下策略,后面还是要去掉的),ping 域名也可以,但是用 curl 发 get 请求就不行了,显示超时,curl 给别的服务发请求都正常。
然后用另外一个网段的机器操作,也是正常的。
看 nginx 日志,请求就没有进去。
现在很苦恼……
1
internelp 2021-07-19 17:59:11 +08:00
看下终端是否配置了代理呢
|
2
milk97 2021-07-19 18:15:13 +08:00
看下 /etc/hosts,是不是指定了域名的 IP
|
3
AngryPanda 2021-07-19 18:21:50 +08:00
是否设置了环境变量 HTTP_PROXY 之类?
|
4
darknoll 2021-07-19 18:28:41 +08:00
加个-L 试试?
|
5
lasuar 2021-07-19 19:15:35 +08:00
curl 加-v 看看通信过程
|
6
falcon05 2021-07-19 19:28:16 +08:00 via iPhone
是不是有 waf 把 curl 默认 ua 拦截了,换个 ua 试试
|
7
guanyin8cnq12 2021-07-19 19:29:57 +08:00
这是有拦截啊 ,用 tcping,ping 80
|
8
zzyphp111 2021-07-19 20:18:47 +08:00
给你推荐下命令( mac | linux ):
sudo tcpdump -i en0 -n port 80 -vv 可以看到当前机器和外部网络的所有流量交互,都是 ip 到 ip 的,非常详细,顺便还可以看到那些软件窃取了你的隐私上报给第三方。 |
10
zzyphp111 2021-07-19 20:31:01 +08:00 1
|
11
xiangwan 2021-07-19 21:20:56 +08:00
检查 web 服务器起来没有
|
12
aaa5838769 2021-07-19 21:41:28 +08:00
使用 nmap 命令,看下端口是否通的
|
13
wudao95278 2021-07-20 07:35:38 +08:00
# 编辑
vi /etc/sysctl.conf # 添加、报错 net.ipv4.tcp_timestamps = 0 # 生效 sysctl -p |
14
orisine 2021-07-20 09:33:24 +08:00
有可能虚拟机 dns 问题
|
15
ssbg2 OP 嗯,谢谢大家,我这会再去试试看。
|
16
NUT 2021-07-21 08:55:25 +08:00
本地上 telnet 看看接口通了吗
|
17
doveyoung 2021-07-21 10:17:23 +08:00
1. 虚拟机上 curl -v
2. 虚拟机上 tcpdump 3. nginx 上 tcpdump “IP 加端口可以通”,是 curl https://IP:port 吗,还是 telnet ? 还可以检查一下 nginx 上 /proc/sys/net/ipv4/tcp_tw_recycle 的值,值是 1 的时候会影响客户端 nat 后的访问, |
18
ssbg2 OP @NUT 谢谢您,我测试了,是通的。
@doveyoung 谢谢您,1 、虚拟机上用 curl -v,结果就是 Trying xxx.xxx.xxx.xxx:443 .... TCP_NODELAY SET 然后等一会就超时了,提示 Closing connection 0…… 2 和 3 、客户端虚拟机上( 18.200 )使用 curl 发送 get 请求,输出情况是这样: tcpdump -n port 443 -i ens192 and host 192.168.16.218 -vv tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes 15:52:24.481160 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52) 192.168.16.218.https > 192.168.18.200.41034: Flags [S.], cksum 0x3dcd (correct), seq 3835702915, ack 1032333183, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 15:52:24.481209 IP (tos 0x0, ttl 64, id 9141, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:25.482070 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52) 192.168.16.218.https > 192.168.18.200.41034: Flags [S.], cksum 0x9963 (correct), seq 3851342334, ack 1032333183, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 15:52:25.482136 IP (tos 0x0, ttl 64, id 9552, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:27.485907 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52) 192.168.16.218.https > 192.168.18.200.41034: Flags [S.], cksum 0xc9fe (correct), seq 3882655621, ack 1032333183, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 15:52:27.485972 IP (tos 0x0, ttl 64, id 10776, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:31.489995 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52) 192.168.16.218.https > 192.168.18.200.41034: Flags [S.], cksum 0x1633 (correct), seq 3945222038, ack 1032333183, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 15:52:31.490057 IP (tos 0x0, ttl 64, id 13410, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:39.505889 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52) 192.168.16.218.https > 192.168.18.200.41034: Flags [S.], cksum 0xcf03 (correct), seq 4070477646, ack 1032333183, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 15:52:39.505945 IP (tos 0x0, ttl 64, id 19809, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 然后 nginx 上( 16.218 )使用 tcpdump 监听到的日志是这样: tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes 15:52:25.568684 IP (tos 0x0, ttl 63, id 6305, offset 0, flags [DF], proto TCP (6), length 52) 192.168.18.200.41034 > 192.168.16.218.https: Flags [S], cksum 0x513e (correct), seq 1032333182, win 29200, options [mss 1400,nop,nop,sackOK,nop,wscale 7], length 0 15:52:25.569331 IP (tos 0x0, ttl 63, id 9141, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:26.569602 IP (tos 0x0, ttl 63, id 6306, offset 0, flags [DF], proto TCP (6), length 52) 192.168.18.200.41034 > 192.168.16.218.https: Flags [S], cksum 0x513e (correct), seq 1032333182, win 29200, options [mss 1400,nop,nop,sackOK,nop,wscale 7], length 0 15:52:26.570270 IP (tos 0x0, ttl 63, id 9552, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:28.573661 IP (tos 0x0, ttl 63, id 6307, offset 0, flags [DF], proto TCP (6), length 52) 192.168.18.200.41034 > 192.168.16.218.https: Flags [S], cksum 0x513e (correct), seq 1032333182, win 29200, options [mss 1400,nop,nop,sackOK,nop,wscale 7], length 0 15:52:28.574321 IP (tos 0x0, ttl 63, id 10776, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:32.577927 IP (tos 0x0, ttl 63, id 6308, offset 0, flags [DF], proto TCP (6), length 52) 192.168.18.200.41034 > 192.168.16.218.https: Flags [S], cksum 0x513e (correct), seq 1032333182, win 29200, options [mss 1400,nop,nop,sackOK,nop,wscale 7], length 0 15:52:32.578604 IP (tos 0x0, ttl 63, id 13410, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:40.594269 IP (tos 0x0, ttl 63, id 6309, offset 0, flags [DF], proto TCP (6), length 52) 192.168.18.200.41034 > 192.168.16.218.https: Flags [S], cksum 0x513e (correct), seq 1032333182, win 29200, options [mss 1400,nop,nop,sackOK,nop,wscale 7], length 0 15:52:40.594906 IP (tos 0x0, ttl 63, id 19809, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:52:56.643423 IP (tos 0x0, ttl 63, id 6310, offset 0, flags [DF], proto TCP (6), length 52) 192.168.18.200.41034 > 192.168.16.218.https: Flags [S], cksum 0x513e (correct), seq 1032333182, win 29200, options [mss 1400,nop,nop,sackOK,nop,wscale 7], length 0 15:52:56.644167 IP (tos 0x0, ttl 63, id 33143, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 15:53:28.709344 IP (tos 0x0, ttl 63, id 6311, offset 0, flags [DF], proto TCP (6), length 52) 192.168.18.200.41034 > 192.168.16.218.https: Flags [S], cksum 0x513e (correct), seq 1032333182, win 29200, options [mss 1400,nop,nop,sackOK,nop,wscale 7], length 0 15:53:28.709799 IP (tos 0x0, ttl 63, id 48301, offset 0, flags [DF], proto TCP (6), length 40) 192.168.18.200.41034 > 192.168.16.218.https: Flags [R], cksum 0x03e1 (correct), seq 1032333183, win 0, length 0 以上都是用域名请求的,客户端能解析到实际的内网 IP 且服务端能监听到请求,我认为网络层是通的,现在就是没有发送到 nginx 里。 使用 curl 对 IP 请求是这样请求的: https://IP:port/assets,可以正常得到返回信息。 另外就是 /proc/sys/net/ipv4/tcp_tw_recycle 这个值是 0 |
19
doveyoung 2021-07-21 17:51:36 +08:00
看 nginx 抓包的信息,nginx 收到了请求但是没有回复给客户端,客户端一直在 seq 1032333183 / 1032333182
我暂时只想到这几点 1. 客户端或服务端的 MTU 值不合理 2. 类似 /proc/sys/net/ipv4/tcp_tw_recycle =1 的原因,但是你检查后值是 0,可以暂时排除 3. nginx 本应该回复给 192.168.18.200 的包,回复给了错误的 IP,在 openstack 里的虚拟机使用了浮点 IP 后经常出现这种问题 4. emmmmm 想不到了 ( :(| |
21
ssbg2 OP @doveyoung 嗯,顺着您的思路,我查看了下 mtu 和相关的设置,都是正常的,包括使用 netstat -s |grep reject 查看了下,发现因为时间戳拒绝的包很多。
最终发现了问题的原因:之前这个 nginx 服务器上多绑定了一个 18 段的 IP,然后更改了网络环境后,这个网卡的配置却一直没有被删除,所以就是您说的 nginx 服务器找不到正确的路径回复给客户端,导致了握手失败。 删除这个 ip 配置后,一切正常了。 谢谢您了! |
22
v2clay 2021-07-29 08:19:48 +08:00 via Android
我去,生产环境下,我们也遇到过,配双网卡导致的。这个是低级错误。用 router 命令查路由表
|
23
asuraa 2021-12-16 18:26:13 +08:00
卧槽 我遇到了一个更诡异的事情...
tcping 正常 ping 正常 http 抓包 服务端有来有回 客户端只有去没有回 防火墙都检查了 没问题 服务器也重装了 就是不知道为毛 |