use iptables to manage firewalling of ubuntu 16.04 bridge on VMware

背景: IDC分配了大量IP地址,但是自己并不能做网关,但我又不能把所有的机器全部直接置于外网,增加管理成本。
方案:
使用ubuntu 16.04做防火墙(FW)
外网(internet)只连接FW的ens160。
增加DMZ网络(DMZ),所有的需要外网IP的机器和FW的ens192全部连接到DMZ。

在FW中安装bridge-utils并桥接ens160与ens192,不知道怎么桥接的请直接参考这里

接下来就是在VMware上启用DMZ和internet的混杂模式(Promiscuous Mode)。记住,两个网络的混杂模式都必须开启。不知道怎么开启混杂模式的可以看这里。这里没必要开启整个vSwitch的混杂模式,只需要开启DMZ和internet端口组就足够了。

到了这步,你的桥接就做完了。这个时候,你DMZ里面所有的机器都有完全的外网访问权限,你在iptables里面设置的规则完全限制不了DMZ的网络。接下来就是启用iptables对bridge的限制。

运行下面命令启用bridge netfilter模块

modprobe br_netfilter

修改 /etc/modules-load.d/modules.conf,在最后加上下面一行,这样机器在重启后也会自动加载bridge netfilter模块

br_netfilter

再修改 /etc/sysctl.conf,在文件的最后添加下面几行:

###################################################################
# For iptables to manage bridge firewalling
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

最后,运行下面命令使配置生效

sysctl -p

现在,就可以使用iptables对DMZ进行管理了。
不过,我目前还没摸清这里面进出端口(iptables里面的-i和-o)的规则,只能直接使用IP了。

Linux下VMware虚拟机不能启动(The process exited with an error:)

在公司的研发机上架了几个虚拟机跑测试,机器好久没有关过了,但上周六却突然因为断电 ,服务器重启了,今天到公司一看

我的其中一个虚拟机居然没有起来 ~

马上打开终端登陆到服务器试图手动启动,居然给我报错

Unable to change virtual machine power state: The process exited with an error: End of error message

到/tmp/vmare-user下面查看最新日志

[root@devchn vmware-user]# cat 11282.log
Mar 31 10:54:27: vmx| Log for VMware Server pid=11282 version=1.0.4 build=build-56528 option=Release
Mar 31 10:54:27: vmx| Command line: "/usr/lib/vmware/bin/vmware-vmx" "-C" "-@" """" "/var/lib/vmware/Virtual Machines/Windows_old/Windows XP Professional.vmx"
Mar 31 10:54:27: vmx| vmxvmdb: Index name being generated from config file
Mar 31 10:54:27: vmx| VMXVmdbConnectServerd - Trying to discover serverd
Mar 31 10:54:27: vmx| MStat: Creating Stat system.cpuusage
Mar 31 10:54:27: vmx| MStat: Creating Stat system.ram
Mar 31 10:54:27: vmx| MStat: Creating Stat system.uptime
Mar 31 10:54:27: vmx| MStat: Creating Stat system.load
Mar 31 10:54:27: vmx| Msg_Post: Error
Mar 31 10:54:27: vmx| [msg.util.msde.mkdir] Cannot create directory "/dev/null/.vmware": Not a directory.
Mar 31 10:54:27: vmx| [msg.hostPosix.userdir] Cannot proceed without directory "~/.vmware". It is needed to store user preferences and other information.
Mar 31 10:54:27: vmx| ----------------------------------------
Mar 31 10:54:27: vmx| POST(no connection): Cannot create directory "/dev/null/.vmware": Not a directory.
Mar 31 10:54:27: vmx| Cannot proceed without directory "~/.vmware". It is needed to store user preferences and other information.
Mar 31 10:54:27: vmx|
Mar 31 10:54:27: vmx| Module Host initialization failed.
Mar 31 10:54:27: vmx| Flushing VMX VMDB connections
Mar 31 10:54:27: vmx| Failed to initialize VM.
[root@devchn vmware-user]#

原来是由于我上次由于需要,将user用户的home目录设为了/dev/null,而vmware在启动的时候,需要在用户的home目录底下创建一个名称为.vmware 的隐藏文件夹。
这样一来,我的user用户当然不可能在/dev/null下面创建文件夹了,难怪这个虚拟机不能起来了
于是将user的home目录改为/tmp,再次点亮就OK了