无法连接到运行Django的VM

时间:2014-07-25 15:09:29

标签: django http virtual-machine virtualbox portforwarding

使用VirtualBox,我有一台运行Centos 7的支持NAT的VM。主机操作系统是Windows 7.我似乎无法访问在VM内运行的Django Web服务器。我错过了什么?

我为虚拟机设置了两个端口转发规则:

Port Forwarding Rules

我在客户操作系统上启动Django Web服务器:

python manage.py runserver 0.0.0.0:8000

我尝试访问主机操作系统上的网页:

http://localhost:8000

Google Chrome向我提供了错误代码ERR_CONNECTION_RESET

主机操作系统上curl的结果:

[user@win7 ~ ]$ curl http://localhost:8000
curl: (56) Recv failure: Connection reset by peer

以下是在来宾操作系统上执行netstat的结果:

[user@vm ~ ]$ netstat -na | grep 8000
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN

以下是在主机操作系统上执行netstat的结果(使用Cygwin):

[user@win7 ~ ]$ netstat -na | grep 8000
  TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING

还值得一提的是SSH规则有效。我可以毫无问题地SSH到机器上。

2 个答案:

答案 0 :(得分:1)

这不是一个解决方案,而是解决我的问题。也许这可以帮助任何人遇到类似我的问题,并希望能够连接到他们的VM的网络服务器。

由于SSH正在运行,我想我可以通过SSH隧道访问网页。通过命令行执行此操作的语法是:

ssh -L <local-port>:<remote-host>:<remote-port>

所以在我的情况下,如果我想通过命令行打开隧道,我会这样做:

ssh -L 8000:127.0.0.1:8000

这样我就可以浏览http://localhost:8000并访问该网站。

您也可以通过PuTTY执行此操作,但我不会在此处解释,因此只需谷歌作为指南。

答案 1 :(得分:0)

ssh隧道是一个好的解决办法,但问题几乎可以肯定是CentOS 7现在使用firewalld而不是iptables来管理访问。并且,与iptables不同,默认配置非常严格。

如果

  

ps -ae | grep防火墙

返回类似

的内容
  

602? 00:00:00 firewalld

你的系统正在运行firewalld,而不是iptables。他们不会一起跑。

要更正您的VM,以便您可以从主机访问您的django站点,请使用以下命令:

  

firewall-cmd --zone = public --add-port = 8000 / tcp --permanent

     

firewall-cmd --reload

非常感谢pablo v在帖子&#34;访问虚拟机上的django服务器&#34;指出这一点。