配置了家里的虚拟主机,想再外网可以访问,在网上找了一大堆教程,结果还是无效。
以下是为了大家少走弯路,总结出的一套方法。
VMWARE ESXI 的防火墙既然配置文件都是在内存里的。
我们可以把它保存到硬盘上,开机后在自动任务里写个命令把改过的配置文件拷贝到内存中对应的目录下。这样就可以达到开机自动开启防火墙规则,不再需要每次都打开SSH修改防火墙的文件了。
第一步,
编辑配置文件,除了是 service.xml 以外,可以自定义文件名,放到/etc/vmware/firewall目录下,同样生效,可以使用 service.xml 做模版来改,也可以用类似如下的配置方式
<ConfigRoot>
<service>
<id>VNC</id>
<rule id='0000'>
<direction>inbound</direction>
<protocol>tcp</protocol>
<porttype>dst</porttype>
<port>
<begin>5911</begin>
<end>5919</end>
</port>
</rule>
<rule id='0001'>
<direction>outbound</direction>
<protocol>tcp</protocol>
<porttype>dst</porttype>
<port>
<begin>0</begin>
<end>65535</end>
</port>
</rule>
<enabled>true</enabled>
<required>false</required>
</service>
</ConfigRoot>
和前一个文档里提到的格式不一样的地方是,只有这一条策略,并且头和尾多了 <ConfigRoot>一对标记。
可以将文件 拷贝到/vmfs/volumes/本地硬盘的目录下。这一级的目录的名字是你为 esxi 本地硬盘取在存储器里取和名字。
第二步
官方的说明:编辑/etc/rc.local,以便在开机后执行把文件 拷贝到实际生效的配置文件所在的目录下的功能
问题就在这里了,无数次失败告诉我,这个rc.local是无法修改的(可能我技术不够)
但是我转换了方法,修改 /etc/rc.local.d/ 目录中的 local.sh 文件(同样可以达到我们想要的目的)
下图就是文件所在地址:/etc/rc.local.d/local.sh
在行 exit 0 上面添加要执行的命令。例如:
#Copy the new firewall rule from vmfs place holder to file system 下面一行是复制你想要的防火墙规则进去系统文件里
cp /vmfs/volumes/datastore1/etc/ssh_2222.xml /etc/vmware/firewall/
#refresh firewall rules刷新防火墙规则
esxcli network firewall refresh
#Copy the modified services file from vmfs place holder to file system下面一行是复制你想要的服务所用的,无用到请注释掉
cp /vmfs/volumes/datastore1/etc/services /etc/services
#Restart inetd to get the changes下面一行是杀进程用的,无用到请注释掉
kill -HUP `cat /var/run/inetd.pid`
特别注意:
在 exit 0 行后面添加的命令不会执行。
可以在 exit 0 前面添加其他命令。
命令按列出的顺序执行。
通常,不必修改 local.sh 文件的权限。在 ESXi 中,默认情况下,root 用户对此文件具有读写权限。