telnet:连接到地址 192.168。33.x:连接被拒绝 - 通过 Vagrant centos 机器

telnet: connect to address 192.168.33.x: Connection refused - over Vagrant centos machine

我创建了一台centos 机器并在其上安装了nexus 服务。 Nexus 服务在 8081 端口上 运行,我在 vagrant 文件中使用以下命令从 vagrant 文件打开了该端口。

    machine1.vm.network "private_network", ip: "192.168.33.x"
    machine1.vm.network "forwarded_port", guest: 80, host: 80
    machine1.vm.network "forwarded_port", guest: 8080, host: 8080
    machine1.vm.network "forwarded_port", guest: 8081, host: 8081

nexus 服务在 centos 机器上 运行 正常,但是从同一台服务器到端口的 telnet 以及来自其网络的服务器都失败了。该端口也无法从主机 windows 计算机访问。

服务器 IP 可以从其网络机器访问,这里所有 3 个网络机器都是从 vagrant 文件创建的

我已经尝试查看并确认 nexus 服务实际上是 运行 在 8081 端口上,它的 运行

我已尝试打开端口 8081 以确保防火墙未使用以下命令阻止

iptables -A INPUT -p tcp -m tcp --dport 8081 -j ACCEPT

我浏览了多个论坛以查看是否有任何解决方案有效,我承认这是一个非常普遍的错误,即使我过去也遇到过,但在这种情况下无法确定根本原因。我怀疑它是否与 vagrant 特定配置有关

此外,我尝试从 centos 服务器和主机服务器 curl 服务,它不起作用:

]$ curl http://localhost:8081
curl: (7) Failed connect to localhost:8081; Connection refused

netstat 命令没有给出任何结果:

netstat -an|grep 8081
[vagrant@master1 bin]$

但是 nexus 服务已启动并且 运行 在具有相同端口的服务器上

这里是vagrant文​​件代码

   config.vm.define "machine1" do |machine1|
    machine1.vm.provider "virtualbox" do |host|
      host.memory = "2048"
      host.cpus = 1
    end
    machine1.vm.hostname = "machine1"
    machine1.vm.network "private_network", ip: "192.168.33.x3"
    machine1.vm.network "forwarded_port", guest: 80, host: 80
    machine1.vm.network "forwarded_port", guest: 8080, host: 8080
    machine1.vm.network "forwarded_port", guest: 8081, host: 8081
    machine1.vm.synced_folder "../data", "/data"
   end


      config.vm.define "machine2" do |machine2|
              machine2.vm.provider "virtualbox" do |host|
      host.memory = "2048"
      host.cpus = 1
    end
    machine2.vm.hostname = "machine2"
    machine2.vm.box = "generic/ubuntu1804"
    machine2.vm.box_check_update = false
    machine2.vm.network "private_network", ip: "192.168.33.x2"
    machine2.vm.network "forwarded_port", guest: 80, host: 85
    machine2.vm.network "forwarded_port", guest: 8080, host: 8085
    machine2.vm.network "forwarded_port", guest: 8081, host: 8090
   end

   config.vm.define "master" do |master|
      master.vm.provider "virtualbox" do |hosts|
        hosts.memory = "2048"
        hosts.cpus = 2
      end
      master.vm.hostname = "master"
      master.vm.network "private_network", ip: "192.168.33.x1"
   end

end

由于 nexus 服务在端口 8081 上 运行,我应该可以使用 http://localhost:8081.

从我的主机访问该服务

如您所料,问题很可能是 Vagrant 网络问题。如果您只想从主机访问来宾上的 nexus 服务 运行,也许 会很有用。 要解决此问题,您可以尝试让 Vagrant box 在 public 网络上可用,然后使用 public IP 访问它,为此,您必须在 Vagrant 文件中启用 config.vm.network "public_network" 并且然后做一个vagrant reload。完成后,尝试访问 http://public_IP_of_guest:8081

请告诉我进展如何。

这可能有很多来源造成的。就我而言,我使用 vagrant fedora boxe。 我试过了:

  • 首先使用我附加到仅主机适配器的 private_network 并启动 httpd 服务来测试来宾和主机之间的连接

      config.vm.network "private_network", type: "dhcp", name: "vboxnet2"
      config.vm.network "forwarded_port", guest:80, host:7070
    

但我无法从主机 ping 我的来宾计算机,也无法远程登录打开的 httpd 服务

  • 第二次使用public_network并启动httpd服务来测试连通性

      config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)", use_dhcp_assigned_default_route: true
    

我可以从我的主机 ping 我的来宾,但我无法远程登录 httpd 服务。

对于这两个用例,问题是 fedora 来宾主机上的端口 80 被防火墙阻止了。这是解决问题并使 privat_network 和 public_ntwork 都正常工作的方法:

   firewall-cmd --permanent --add-port 80/tcp  #open the port permanently
   firewall-cmd --zone=public --permanent --add-service=http 
   firewall-cmd --list-port  # list to check if the port was opened   
   systemctl stop firewalld   # stop and open the firewall service
   systemctl start firewalld