我运行专用的 ubuntu 10.04 服务器。
我使用 kvm/libvirt/virsh 来运行同样是 ubuntu 10.04 的虚拟机。
我桥接了网络(2 个 IP 中的 1 个通过 NAT 路由到 LAN,我的 VM(192.168.1.111)在那里接收它。
我可以通过 ssh 从虚拟机本地连接到虚拟机,我可以 ping 我网络之外的任何站点。
我使用 iptables 路由了端口 80(和其他端口),并且可以从外部连接到虚拟机上的 apache。
然而,apt 根本不起作用,这让我很难受,因为我无法安装任何东西......
$ apt-get update
导致一系列错误,如下:
W: Failed to fetch http://de.archive.ubuntu.com/ubuntu/dists/lucid-backports/multiverse/binary-amd64/Packages.gz Unable to connect to de.archive.ubuntu.com:http: [IP: 141.30.13.30 80]
我可以从终端 ping 域和 IP,没有任何问题。
我可以毫无问题地解析域名。
我尝试了在网上找到的所有 /etc/apt/sources.list 变体。一个在我的专用机器上运行的列表,一个默认列表,几个手工编译的列表。结果总是一样的:无法连接
我认为这是某种路由问题,但我真的很困惑,因为我似乎可以从虚拟机获得完全的网络访问权限。由于未安装软件包,我无法从虚拟机终端执行 wget 或 ftp(并且我无法编译它们,因为没有安装 gcc - 我想使用 apt 来完成所有这些操作 ;) )。哦,aptitude 当然是一样的......
帮助!
PS这是我的 iptables 设置:
iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 86 packets, 14254 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- any any anywhere anywhere tcp dpt:https to:192.168.1.111:443
0 0 DNAT tcp -- any any anywhere anywhere tcp dpt:ftp to:192.168.1.111:21
13 780 DNAT tcp -- any any anywhere anywhere tcp dpt:www to:192.168.1.111:80
Chain POSTROUTING (policy ACCEPT 31 packets, 2236 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE tcp -- any any 192.168.1.0/24 !192.168.1.0/24 masq ports: 1024-65535
1 76 MASQUERADE udp -- any any 192.168.1.0/24 !192.168.1.0/24 masq ports: 1024-65535
1 84 MASQUERADE all -- any any 192.168.1.0/24 !192.168.1.0/24
iptables -L -v
Chain INPUT (policy ACCEPT 1699 packets, 354K bytes)
pkts bytes target prot opt in out source destination
18 1179 ACCEPT udp -- virbr0 any anywhere anywhere udp dpt:domain
0 0 ACCEPT tcp -- virbr0 any anywhere anywhere tcp dpt:domain
2 656 ACCEPT udp -- virbr0 any anywhere anywhere udp dpt:bootps
0 0 ACCEPT tcp -- virbr0 any anywhere anywhere tcp dpt:bootps
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2448 3146K ACCEPT all -- any any anywhere 192.168.1.0/24 state NEW,RELATED,ESTABLISHED
0 0 ACCEPT all -- any virbr0 anywhere 192.168.1.0/24 state RELATED,ESTABLISHED
1448 79657 ACCEPT all -- virbr0 any 192.168.1.0/24 anywhere
0 0 ACCEPT all -- virbr0 virbr0 anywhere anywhere
0 0 REJECT all -- any virbr0 anywhere anywhere reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0 any anywhere anywhere reject-with icmp-port-unreachable
@g-巴赫
好的,下面是过滤规则(iptables -L -v -t filter)。
关于架构:主机有 2 个 ip 映射到 eth0 和 eth1。eth1 是 libvirt 的桥接器。并且应该路由/屏蔽到不同的虚拟机(通常我们不会为虚拟机打开重叠的端口 - 至少不会低于 1024)。
经过一番尝试后,我可以更好地说明问题:
这是防火墙 (iptables) 规则。我显然不知道如何设置 iptables(以前从未这样做过)。当我疯狂地摆弄它们时,我发现有些东西可以工作,有些则不行(与 ubuntu 服务器的连接可以工作,传入连接不再工作,等等)。
因此,您是对的,网桥等都没问题。关于从虚拟机到外部的 ping 和连接:它无法使用 wget 和 ssh/telnet。有一个初始连接,但是我没有发送任何数据(我通过路由了 20、21 和 22)。还有 - 例如,我可以在虚拟机中安装 apache 和 wordpress 并从外部连接到它,但是 wordpress 无法建立 ftp 连接来获取更新等。
iptables -L -v -t 过滤器
Chain INPUT (policy ACCEPT 19574 packets, 7015K bytes)
pkts bytes target prot opt in out source destination
27 1757 ACCEPT udp -- virbr0 any anywhere anywhere udp dpt:domain
0 0 ACCEPT tcp -- virbr0 any anywhere anywhere tcp dpt:domain
43 14104 ACCEPT udp -- virbr0 any anywhere anywhere udp dpt:bootps
0 0 ACCEPT tcp -- virbr0 any anywhere anywhere tcp dpt:bootps
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1850 119K ACCEPT all -- any any anywhere 192.168.1.0/24 state NEW,RELATED,ESTABLISHED
0 0 ACCEPT all -- any virbr0 anywhere 192.168.1.0/24 state RELATED,ESTABLISHED
1538 308K ACCEPT all -- virbr0 any 192.168.1.0/24 anywhere
0 0 ACCEPT all -- virbr0 virbr0 anywhere anywhere
0 0 REJECT all -- any virbr0 anywhere anywhere reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0 any anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 5787 packets, 635K bytes)
pkts bytes target prot opt in out source destination
谢谢你的努力!
答案1
由于您可以从虚拟机 ping 站点,因此路由不可能是问题所在 - 至少我看不出它怎么会是问题所在。您能否发布过滤表的 iptables?也许在通过特定端口转发传出的新连接时存在问题。
只是为了确保我正确理解了您使用的拓扑:您有一个具有两个 IP 的物理 Ubuntu 10.04 服务器,在该服务器上,您运行一个具有一个接口的 VM,该接口桥接到服务器的一个接口?我想我在这里弄错了,与您的描述不太相符...
另外,是否故意将 INPUT 和 OUTPUT 的策略设置为 ACCEPT,并且另外还有一堆规则也跳转到 ACCEPT?我不明白这会如何影响您的问题,我只是很好奇 :P