场景如下:
我从 Ubuntu 20.04 LTS 升级到 Ubuntu 22.04 LTS。但是,升级后我失去了与主机的完全连接,只能通过 Cloud Shell 控制台访问它。
观察到的行为:
无法通过公共 IP 访问 SSH。仅通过串行控制台使用 Cloud Shell。测试了密钥交换 RSA 是否是问题,因为现在推荐使用 ECDSA,但这似乎不是问题。
执行时无法到达任何来源
sudo apt update
nslookup google.es
不会给出任何输出(无法到达)ip addr
IP 接口已启动:1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000 link/ether 02:00:17:00:95:86 brd ff:ff:ff:ff:ff:ff inet 10.0.0.62/24 metric 100 brd 10.0.0.255 scope global dynamic ens3 valid_lft 62767sec preferred_lft 62767sec inet6 fe80::17ff:fe00:9586/64 scope link valid_lft forever preferred_lft forever
ip route
输出:default via 10.0.0.1 dev ens3 proto dhcp src 10.0.0.62 metric 100 10.0.0.0/24 dev ens3 proto kernel scope link src 10.0.0.62 metric 100 10.0.0.1 dev ens3 proto dhcp scope link src 10.0.0.62 metric 100 169.254.169.254 via 10.0.0.1 dev ens3 proto dhcp src 10.0.0.62 metric 100
iptables -L
输出:Chain INPUT (policy DROP) target prot opt source destination Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
out 的输出
iptables-save -c
如下::INPUT DROP [71948:4580785] :FORWARD DROP [0:0] :OUTPUT ACCEPT[59782:3909997] COMMIT # Completed on Tue Aug 16 08:10:43 2022
Netplan 只有 1 个名为的配置文件,
50-cloud-init.yaml
其中包含以下内容:ethernets: ens3: dhcp4: true match: macaddress: 02:00:17:00:95:86 set-name: ens3 version: 2
/etc/resolv.conf
输出:nameserver 127.0.0.53 options edns0 trust-ad search vcn09040100.oraclevcn.com
我不确定这是否是 Oracle 云配置问题,尽管我没有接触过任何东西,而且它之前可以运行并托管网站。 VCN
vcn-20210904-0043
分配有子网 10.0.0.0/24 和以下入口安全列表
我的想法已经用完了,非常感谢任何帮助。我有其他实例在共享相同 VCN 的同一租户上运行,并且没有任何问题......所以我倾向于认为这是操作系统问题。
答案1
你有iptables阻止网络操作的规则。尽管没有明显的规则,但仍然应用了一项规则:过滤器/输入的默认 DROP 策略。这意味着系统接收到的任何流量在应用程序有机会使用它之前都会被丢弃。 DNS解析失败。 TCP 连接(显然是直接连接到 IP 地址,因为 DNS 失败)保持SYN-SENT
状态。 ETC。
我不知道在刷新之前系统中仍然存在哪些规则,因为问题中没有写任何有关此的内容。将现有规则删除到规则集中是一项危险的操作iptables:它不会将默认策略恢复为ACCEPT
.因此,要手动盲目地删除所有过滤规则,应该这样做:
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
请注意,还有其他可能的表正在使用中(nat
、mangle
、raw
),但 OP 的iptables-save -c
命令并未显示它们正在使用中。
上面的第一个命令将恢复过滤器/输入策略,并且ACCEPT
仅DROP
在删除规则和(现在为空)用户链之后。
笔记:nftables不会遇到这个缺陷,并且nft flush ruleset
可能会在一个命令中对所有表执行上述所有操作,假设iptables
(as iptables-nft
)现在使用nftablesAPI。
还要做的事情:找到系统中配置的哪一部分设置了防火墙规则并修复它。
这可能是防火墙包,例如firewalld
或ufw
,或手动规则。您必须调查应该在那里进行哪些纠正。
对于配置文件中的直接手动规则,此命令可能有助于查找此类候选文件:
grep -r 'INPUT DROP' /etc
同时系统没有防火墙规则,这不是一个好主意。但它仍然受到云环境提供的防火墙的保护。