OCI使用遇到的问题

最近折腾下OCI(即Oracle Cloud Infrastructure),甲骨文云的服务器,遇到两个奇葩问题记录于此。

1. 安全组设置不起作用

创建好OCI后,自然是要设置云服务器的安全组规则,一般默认都只开启了22端口的访问,按其他云厂商的正常操作,就是在管理界面上设置ingress和egress规则,跟写iptables命令类似,但结果发现规则保存后,死活不起作用,端口还是不通。顺便提一下,我这里使用的是ubuntu系统。

找了好一阵,发现这么篇文章:Enabling Network Traffic to Ubuntu Images in Oracle Cloud Infrastructure

意思是说,ubuntu使用的是ufw来管理防火墙规则,好用但是可能引起问题,所以需要自己手动编辑iptables命令。文章也很贴心,说只需要找到文件/etc/iptables/rules.v4,然后以添加80端口为例,只需要在22端口规则后面添加类似的一句就可以了:

-A INPUT -i tun+ -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8000:8100 -j ACCEPT

我这里考虑到需要开启全部的tun0内网访问,加了如上第一行的规则。以及开启了8000-81000端口范围的tcp访问。

使生效:

sudo iptables-restore < /etc/iptables/rules.v4

查看规则:

sudo iptables -L INPUT

2. scp只能拷贝32768个字节

另外发现一个诡异问题,花了我半天时间。当从aws的机器上拷贝文件时没有问题,但从腾讯云的机器上拷贝时却只能拷贝32768个字节,也就是4k,接着就是速度一直为0,显示为0.0KB/s   --:-- ETA。

做了多种实验发现,如果是从OCI机器拷贝到腾讯云上,就没有问题,只是从腾讯云拷贝到OCI机器上才会出现这种现象。而且跟端口也没有关系,跟协议没有关系,拿nc这种基于tcp传输的方式,也会卡住没有速度,或者是走80端口的http协议,也是一直curl卡住没有速度。然而ssh登录,或者是nc连接,却丝毫没有问题。想着是不是有什么传输字节数的限制,就建立连接,然后1k接着1k的发数据,居然就没有问题了。

于是以为腾讯云那边是不是有什么ip黑名单之类的限制,沟通好久也无果。

仔细琢磨好久,感觉跟数据包的大小有关系,检查网络接口的MTU,这时发现一个有趣的问题,腾讯云的MTU为1500,OCI的为9000,AWS的为9001,各不一样。

调整为1500,发现问题居然解决了:

ifconfig eth0 mtu 1500

MTU为最大发送单元,1500一般为普通帧,而9000就为巨帧,数据发送时,如果拆得越小,那么包就越多,就更耗CPU,如果CPU不够的话,就无法达到网卡吞吐上限。似乎帧越大越好,但是数据在经过一些旧的交互机线路时,处理不了太大的帧,又需要将一个巨帧拆解成多个小帧。问题是有的设备处理不了就直接丢弃了,结果就产生了连接建立得好好的,但就是数据传输不过来的现象。

目前来看,国外云服务器都默认设置了较大的mtu,而国内的云服务器则mtu较小,两者相通导致了问题。

发表于 2023年09月30日 17:04   评论:0   阅读:813  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo