![Virtualbox 将特定 IP 转发给客户机](https://linux22.com/image/625311/Virtualbox%20%E5%B0%86%E7%89%B9%E5%AE%9A%20IP%20%E8%BD%AC%E5%8F%91%E7%BB%99%E5%AE%A2%E6%88%B7%E6%9C%BA.png)
我有一台专用服务器,已Ubuntu 13.10
安装并进行了基本安装,用于Virtualbox
管理phpvirtualbox
其上的客户操作系统。我有两个指向该服务器的 IP 地址,我想将其中一个 IP 地址专门用于我在Ubuntu 12.04
其上安装的虚拟操作系统。
这意味着每个端口等都将通过主机服务器并直接转发到该客户操作系统。
我研究过 VirtualBox 上的不同网络方法,但似乎都没有适合我。
如果我使用 NAT 和端口转发,我可以将客户 PC 设置为仅通过第二个 IP 注册对这些端口的调用,这很好。但是,我无法使用主机 PC 上已在使用的任何标准端口,例如 SSH 或 80,因为主机 PC 在两个 IP 上都使用它们
我怎样才能让主机操作系统将所有内容传递到特定 IP 的特定客户操作系统?
我做错了吗?我需要使用不同的托管类型吗?
编辑:
从研究和评论来看,桥接应该是前进的方向,但我再次陷入困境,这是我的 /etc/network/interfaces 文件。
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address 1.2.3.4
broadcast 1.2.3.5
netmask 255.255.255.200
gateway 1.2.3.1
# default route to access subnet
up route add -net 1.2.3.6 netmask 255.255.255.220 gw 1.2.3.1 eth0
iface eth0 inet6 static
address 2a01:4f8:161:9442::2
netmask 64
gateway fe80::1
#create bridge using additional IP
auto br1
iface br1 inet static
address 2.3.4.5
netmask 255.255.255.220
gateway 2.3.4.1
broadcast 2.3.4.7
bridge_ports br1 vbox0 vbox1
该服务器是 Hetzner EX,带有一个位于同一 MAC 地址上的附加 IP(如果需要,我可以从他们那里获取不同的 MAC 吗?)
使用上述设置,我将 Win7 客户操作系统设置为桥接至 br1,并将 Windows 中的 ip 设置为静态,设置方法相同,即
address 2.3.4.5
netmask 255.255.255.220
gateway 2.3.4.1
但它无法接入网络
最后我添加到/etc/vbox/interfaces:
vbox0 vbox br1
vbox1 vbox br1
答案1
我建议启用桥接而不是使用 NAT。
编辑:
但是如果你坚持使用 NAT,你可以使用 iptables:
iptables -A FORWARD -i eth0 -d VMIPADDRESS -p tcp --sport PORTTOFORWARD --dport DESTINATIONPORT -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
另外,启用 ipv4 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
编辑:
尝试这个:
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet manual
iface eth0 inet6 static
address 2a01:4f8:161:9442::2
netmask 64
gateway fe80::1
#create bridge using additional IP
auto br0
iface br0 inet static
address 2.3.4.5
netmask 255.255.255.220
gateway 2.3.4.1
broadcast 2.3.4.7
bridge_ports eth0 vbox0 vbox1
up route add -net 1.2.3.6 netmask 255.255.255.220 gw 1.2.3.1 br0
答案2
我在 askubuntu.com 上问了这个问题
https://askubuntu.com/questions/409862/virtualbox-forward-specific-ip-to-guest
版主,请随意删除其中一个!
这是解决问题的方法
经过大量的反复试验后,这似乎是最可靠的选择......
http://wiki.hetzner.de/index.php/Netzkonfiguration_Debian/en#Bridged
桥接 使用桥接配置,数据包直接发送。客户系统表现得像独立的一样。由于这使得客户系统的 MAC 地址从外部可见,因此需要通过 Hetzner Robot 请求虚拟 MAC 地址并将其分配给客户网卡。桥接获得与 eth0 相同的网络配置。eth0 的配置被省略而无需替换。
为每个附加 IP 获取单独的 MAC 地址
然后将其用于主机 /etc/network/interfaces..
# remove or disable configuration for eth0
#auto eth0
#iface eth0 inet static
#
auto br0
iface br0 inet static
address (Main IP)
netmask (like eth0, e.g: 255.255.255.254)
gateway (same as that for the main IP)
bridge_ports eth0
bridge_stp off
bridge_fd 1
bridge_hello 2
bridge_maxage 12
在 virtualbox 中设置客户操作系统以使用桥接网络并选择 br0,然后在高级设置中将网络适配器的 mac 设置为 Hetzner 为新 IP 提供的 MAC 地址(无需任何 :)
然后在客户操作系统中使用这个..
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address (ADD IP 1)
broadcast (FOR ADD IP 1)
netmask (FOR ADD IP 1)
gateway (MAIN IP)
dns-nameservers 8.8.8.8
答案3
您可以使用NAT
,Port Forwarding
以便将所有连接从主机操作系统传递到客户操作系统。
您需要编辑虚拟机网络设置,将网络适配器设置为 NAT 并编辑端口转发选项。在虚拟机的端口转发选项中,指定要转发的端口,
例如,
如果需要 SSH 端口,请指定
Name : SSH
Protocol : TCP
Host IP : <your host ip>
Host Port : <your host SSH port>
Guest IP : <your guest ip>
Guest Port : <your guest port>