AWS yum 无法在私有子网中工作(可以在公共子网中工作)

AWS yum 无法在私有子网中工作(可以在公共子网中工作)

我有一个 VPC,它有一个私有子网和一个公共子网 - 每个子网都包含一个相同构建的 RHEL7 服务器。我相信 VPC 设置正确(见下文)。但是,公共服务器可以使用 yum,而私有服务器不能。私有服务器收到错误...

$ yum search apache
Failed to set locale, defaulting to C
Loaded plugins: amazon-id, rhui-lb
Repo rhui-REGION-client-config-server-7 forced skip_if_unavailable=True due to: /etc/pki/rhui/cdn.redhat.com-chain.crt
Repo rhui-REGION-client-config-server-7 forced skip_if_unavailable=True due to: /etc/pki/rhui/product/rhui-client-config-server-7.crt
Repo rhui-REGION-client-config-server-7 forced skip_if_unavailable=True due to: /etc/pki/rhui/rhui-client-config-server-7.key
Repo rhui-REGION-rhel-server-releases forced skip_if_unavailable=True due to: /etc/pki/rhui/cdn.redhat.com-chain.crt
Repo rhui-REGION-rhel-server-releases forced skip_if_unavailable=True due to: /etc/pki/rhui/product/content-rhel7.crt
Repo rhui-REGION-rhel-server-releases forced skip_if_unavailable=True due to: /etc/pki/rhui/content-rhel7.key
Repo rhui-REGION-rhel-server-rh-common forced skip_if_unavailable=True due to: /etc/pki/rhui/cdn.redhat.com-chain.crt
Repo rhui-REGION-rhel-server-rh-common forced skip_if_unavailable=True due to: /etc/pki/rhui/product/content-rhel7.crt
Repo rhui-REGION-rhel-server-rh-common forced skip_if_unavailable=True due to: /etc/pki/rhui/content-rhel7.key
Could not contact CDS load balancer rhui2-cds01.us-east-1.aws.ce.redhat.com, trying others.

Could not contact any CDS load balancers: rhui2-cds01.us-east-1.aws.ce.redhat.com, rhui2-cds02.us-east-1.aws.ce.redhat.com. 

网络

我有一个使用 RHEL7 AMI 的 AWS VPC。

  • 我有一个 VPC 10.0.0.0/16
  • 我有一个公共子网 10.0.0.0/24
  • 我有一个私有子网 10.0.1.0/24
  • 我有一个互联网网关
  • 我有 NAT
  • 主路由表指向 NAT

    Destination Target Status Propagated
    10.0.0.0/16 local Active No
    0.0.0.0/0 eni-xxxxxxxx / i-xxxxxxxx Active No
    
  • 私有子网与主路由表相关联

  • 第二个(不是主)路由表指向网关

    Destination Target Status Propagated 
    10.0.0.0/16 local Active No
    0.0.0.0/0 igw-xxxxxxxx Active No
    
  • 公有子网与此路由表关联

  • 所有安全组都开放以进行故障排除
  • 我已启用 NAT 进行转发(有时还会伪装……见下文)

    sysctl -q -w net.ipv4.ip_forward=1 net.ipv4.conf.eth0.send_redirects=0
    
    PRIVATE_SUBNETS="10.0.1.0/24"
    for SUBNET in $PRIVATE_SUBNETS; do
        iptables -t nat -C POSTROUTING -o eth0 -s $SUBNET -j MASQUERADE 2> /dev/null || iptables -t nat -A POSTROUTING -o eth0 -s $SUBNET -j MASQUERADE
    done
    
  • 公共子网和私有子网中各有一个服务器

  • 两者均基于相同的 RHEL7 AMI 构建。

测试

  • 在这一切中我都是根...
  • 我尝试了和sslverify=0中的设置,然后执行。但这并没有解决问题。/etc/yum.repos.d/redhat-rhui.repo/etc/yum.repos.d/redhat-rhui-client-config.repoyum clean all
  • 私有子网和公有子网中的服务器都可以 ping 8.8.8.8
  • 两个服务器都能够将名称解析为 IP,包括 yum 存储库的名称。
  • 私人服务器和公共服务器似乎都能够看到和接触以下 RPM:

    $ rpm -Uvh ftp://ftp.pbone.net/mirror/ftp.sourceforge.net/pub/sourceforge/o/os/osolinux/update/RPMS.e/elinks-0.12-0.32.pre5mgc30.x86_64.rpm
    Retrieving ftp://ftp.pbone.net/mirror/ftp.sourceforge.net/pub/sourceforge/o/os/osolinux/update/RPMS.e/elinks-0.12-0.32.pre5mgc30.x86_64.rpm
    error: Failed dependencies:
        libgc.so.1()(64bit) is needed by elinks-0.12-0.32.pre5mgc30.x86_64
        libgpm.so.2()(64bit) is needed by elinks-0.12-0.32.pre5mgc30.x86_64
        libmozjs185.so.1.0()(64bit) is needed by elinks-0.12-0.32.pre5mgc30.x86_64
        libnss_compat_ossl.so.0()(64bit) is needed by elinks-0.12-0.32.pre5mgc30.x86_64
    

如果我尝试在私人服务器上加载新的存储库,则会出现超时......

$ rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
Retrieving http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

curl: (7) Failed connect to pkgs.repoforge.org:80; Connection timed out
error: skipping http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm - transfer failed
  • 打开或关闭伪装似乎没有什么区别。

=== 在此发帖以启发他人 ===
嗨,迈克尔。感谢您的评论。

我确实使用了 traceroute,看到数据包从有问题的私人服务器到达 NAT。我还看到离开服务器的数据包应该是转发的数据包。就是这样。仅此而已。

我感觉请求被存储库拒绝了,因为 ping 和互联网远程 rpm 似乎可以工作……但我不知道为什么。我打开和关闭伪装都得到了相同的结果。NAT

服务器是在创建 VPC 的过程中自动构建的。安全组是使用“方案 2”页面创建的……但目前是完全开放的。

答案1

在与问题中描述的非常相似的情况下,我可以通过将配置添加到来解决proxy/etc/yum.conf

像这样:

echo "proxy=http://my.proxy.internal:3128/" >> /etc/yum.conf

答案2

如果私有子网未连接到互联网,那么您当然无法访问互联网来安装任何软件包。

您还可以在公共子网中启动一个实例,并在安装所需的软件包后,只需创建一个自定义图像您可以在任何子网中启动实例时轻松使用它,无论它是否可以访问互联网。

答案3

我有同样的问题并在使用时解决它

yum 安装 wget

但是当我使用

sudo yum 安装 wget

一切都好。

相关内容