我正在尝试安装多雾路段在我的工作场所使用 Docker(通过 boot2docker for Windows)作为一个学习练习。 FOG 有一个方便的小脚本,可以为您安装所有内容,并且在 Ubuntu 服务器上运行得很好,但我在 Docker 中运行它时遇到了麻烦
我已经使用了 Ubuntu 12.04,因为这是 FOG 的推荐版本。一切似乎都运行良好,我可以tftp localhost
在容器中使用get
文件,并且我可以在 Windows 8.1 主机中使用 tftpget
从容器中获取文件(例如tftp 127.0.0.1 GET boot.txt
),但是当我尝试在另一台计算机上执行相同操作时,它只是时间出去。
我尝试过以下操作:
- 在 boot2docker 中打开 UDP 端口 69(通过 VirtualBox >
boot2docker-vm
> 设置 > 网络 > 端口转发 > 添加 UDP 端口 69(甚至尝试使用各种本地和访客 IP 地址,例如 0.0.0.0、127.0.0.1 和 10.13.0.14,这是机器的IP地址)- 我还添加了一堆UDP端口,包括58162、43595和59037,这是我在Wireshark中查看时在TFTP数据中看到的。最重要的是,我在 Windows 8.1 中使用提升和未提升的权限进行了尝试
- 完全禁用两端 Windows 8.1 中的防火墙。
- 将 VirtualBox 中的网络类型设置为桥接模式(它又回到了 NAt,就像以前一样)
- 在 Docker 内部使用 tcpdump 来确认数据包是从远程计算机传入的(它们是,并且服务器正在发送回复,但数据包没有逃逸容器)
- 在 Windows 8.1 上使用 Wireshark 查找流量。我可以看到来自远程计算机的 TFTP 数据,但没有回复返回到我的远程计算机
- 检查 Ubuntu 中是否有防火墙(没有,这是 Docker 的一个相当精简的版本)
- 尝试从另一台机器访问 FOG 的网络界面(效果很好,我可以向 FOG 添加新图像等)
- 尝试在 Docker 中的空白 Ubuntu 安装上安装 TFTP 服务器(例如,不运行 FOG 安装脚本)。还是不行
- 运行我的图像以
-p 69:69/udp
明确允许端口通过 - 安装 iptables 以显式放出 UDP 端口 69
- 检查我的工作网络的防火墙和交换机,看看端口 69 是否被阻止——事实并非如此(因为 TFTP 流量正在到达 docker 主机)
- 从我的主人那里,我跑了
tftp <ip address of another machine on the network running Wireshark> GET boot.txt
。我看到 TFTP 流量传入(但因为它没有运行 TFTP 服务器,所以返回了错误) - 过去,我们曾在服务器上运行 FOG,但后来它被停用,以便为电子邮件服务器等提供更多资源。
- 我在我的 Ubuntu 14.04 笔记本电脑上尝试了 docker 映像(因此,使用 14.04 作为主机,使用 docker 容器作为来宾)并且它有效,所以问题似乎出在 Windows 上,尽管我不确定从这里该去哪里
所以问题似乎是 TFTP 数据包没有逃逸 Windows(但 HTTP 流量正在逃逸)。
有什么建议么?
答案1
最后,我最终将 Docker 镜像移动到了我身边的 Ubuntu 笔记本电脑上。现在我的 TFTP 服务器可以在零修改的情况下完美运行,因此问题几乎肯定与 Virtualbox、Windows 或 boot2docker 有关(尽管我不确定最后一个)。
我将在更相关的 stackexchange 上发布我的问题(现在我知道这不是 docker 问题),如果我得到答案,我将更新此问题,以便其他人受益