人们常说,「精神病人思路广,智障儿童欢乐多」。像我这种病得不轻的人,自然就在想有没有办法拿 docker 来开 NAT 小鸡呢?
Docker 作为一种容器化技术,通过 cgroup 可以在一定程度上做到资源隔离,虽然不算虚拟化,但是也可以勉强开 NAT 小鸡玩玩。技术要点大概有如下:
- 小鸡里需要 ssh,而且需要一个守护进程
- 需要映射端口
- 需要限制 CPU、内存等资源
- 制作各种 OS 的 image
容器 sshd
N 多年前,当我第一次接触到 Docker 时,我曾经在网络上搜索 “如何 ssh 到容器内”。
(╯‵□′)╯︵┴─┴ 容器一般不是这么用的啦。
但既然开 NAT 小鸡,就必然要 ssh 进去了。通常来说就是在容器里安装配置 sshd 或者 dropbear,然后把端口 publish 就可以了。直接 & 可不太好,更好的方案是我们需要一个守护进程。可以用 Go port of supervisor,https://github.com/ochinchina/supervisord
映射端口
这个就简单了,跑容器的时候直接 -p 就好了,由于是 NAT 小鸡,直接让 docker 随机分配端口岂不是更好!
- docker run –p 22 image
限制资源
限制 CPU 和 RAM 比较容易,run 的时候加上-cpus
和-m
就可以了
限制磁盘比较麻烦,可以参考这篇 https://www.lizi.tw/web/21084.html
OS image
这个其实就是个手工活,写好 Dockerfile,带好 sshd,然后 build 就可以了。
然后到了真正要开小鸡的时候,一顿查之前的命令,不停地 docker run xxx,有没有更好的、鼠标点点点的方案呢?答案当然是有的!
欢迎使用我 fork 之后魔改的 Docker Web,真正实现了鼠标点点点即可开 NAT 小鸡的功能!
https://github.com/BennyThink/EasyDockerWeb
clone 回来,yarn && yarn start
,然后fab prepare
(提前pip3 install fabric3
)即可,默认用户名密码是 admin/admin
在 Image 下面可以选择所有我构建好的 image,用户名密码均为 root/root
比如这里我们选择 Kali,然后给这个小鸡开 80 和 443 端口,并映射到宿主机的随机端口,512M 内存,0.5 个 CPU
点击确认,你的 NAT 小鸡就开好了!
点击确认
你的小鸡好了,赶快 ssh 一下?
选择 Debian Sid,80-90 端口
多么亦可赛艇!就是这么愉快!bug 多也不修,能开小鸡就挺好