如果碰到只有一个 ip 的独立服务器,但是你还想开虚拟机的话,那只能用 NAT 了。映射虚机端口到主机端口,并且把虚机所有的网络连接转发到主机。
找到文件 /etc/network/interfaces
,添加一下内容
auto vmbr2
iface vmbr2 inet static
address 192.168.2.254
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '192.168.2.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.2.0/24' -o vmbr0 -j MASQUERADE
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 1022 -j DNAT --to 192.168.2.1:22
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 1022 -j DNAT --to 192.168.2.1:22
以上配置增加一个虚拟桥接网络,设置为 192.168.2.254
作为内网网关使用,同时做转发,将内网段 192.168.2.x
的流量都转发到 vmbr0,并且增加一个端口映射,将 192.168.2.1
的 22 端口映射到主机的 1022 端口。
以上 vmbr0 为绑定外网ip和物理网卡的虚拟桥接。
做完这个设置,然后重启网络便可
/etc/init.d/networking restart
但是如果碰到虚拟机可以 ping 通外网的 ip 地址,但是不能 ping 域名,端口映射无法生效的情况,请检查主机防火墙 ufw 的设置
vi /etc/default/ufw
#检查 DEFAULT_FORWARD_POLICY="ACCEPT"
vi /etc/ufw/sysctl.conf
#检查 net/ipv4/ip_forward=1
ufw reload