5. 不安全的解决方案:使用 telnet 穿透

5.1. 原理

如果你只能使用 telnet(因为 telnet 代理),那么这个方案可能适合你。

防火墙穿透程序 fwprc 将使用 “tty 代理” cotty,它会打开两个伪终端设备,在每个设备的从属终端上启动一些命令,并固执地将一个终端的每个输出字符复制到另一个终端的输入。其中一个命令将是到服务器站点的 telnet 连接,另一个将是客户端的 pppdpppd 随后可以使用 chat 脚本像往常一样打开和控制 telnet 会话。

实际上,如果你的 telnet 代理允许连接到任意端口,并且如果你可以在服务器主机上可靠地运行守护进程(使用 cron 任务重新启动它,以防崩溃),那么你最好编写一些程序,通过代理将客户端端口连接到服务端端口,这样你就可以使用上面更安全的解决方案,可能使用一些变体,例如
ssh -t -o "ProxyCommand ..."
(如果你将它提交给我,我将很乐意将这样的解决方案集成到 fwprc 发行版中)。

注意:如果你必须使用不安全的基于 telnet 的解决方案,请确保你的目标帐户中没有任何你想保密或不被篡改的内容,因为密码将以明文形式在 Internet 上发送。如果你可以控制这些事情,一次性密码系统或显式加密挑战系统将增强你的安全性,尽管它会使自动化连接脚本变得更加复杂。

5.2. fwprc

我编写了一个自文档化程度非常高的脚本来穿透防火墙,fwprc,可以从 我的站点 获取,以及 cottyfwprc 需要 cotty0.2以及之后的版本)。在我写这些行的时候,最新版本是 fwprc0.3ecotty0.4c.

名称 “fwprc” 是故意 сделан 不可读且发音困难的,这样可以迷惑那些可能会导致困扰你的防火墙的无能的偏执系统管理员(当然,也可能存在合法的防火墙,甚至是不可或缺的防火墙;安全完全是正确配置的问题)。如果你必须大声读出来,请选择你能想到的最糟糕的方式。

竞赛!竞赛!发送给我一个音频文件,其中包含你如何发音 “fwprc” 的数字音频录音。最糟糕的参赛作品将赢得免费升级,他的名字将出现在 fwprc1.0页面上!

我通过配置文件在多种设置中测试了该程序。但当然,根据墨菲定律,它可能会在你那里崩溃。欢迎你贡献增强功能,这将使其他在你之后配置它的人们的生活更轻松。

5.3. .fwprcrc

fwprc 可以通过文件.fwprcrc进行自定义,该文件旨在在防火墙的两侧都相同。拥有多个备用配置可供选择是肯定可能的(例如,就是这样做的),并且留给读者作为练习。

首先,将 fwprc 的适当部分(倒数第二部分)复制到一个名为.fwprcrc在你主目录中的文件中。然后用适合你配置的内容替换变量值。最后,复制到另一台主机并进行测试。

默认行为是在客户端使用 pppd,在服务器上使用 slirp。要修改它,你可以在你的.fwprcrc中使用如下行重新定义相应的函数
remote_IP_emu () { remote_pppd }

请注意,SLiRPpppd 更安全,并且更容易访问,因为它不需要在服务器机器上拥有 root 权限,也不需要额外的防火墙配置来防止从外部世界到防火墙网络的连接。SLiRP 中的基本功能运行良好,但我尚未设法使一些广告宣传的优点发挥作用(例如运行时可控性)。当然,由于它是自由软件,请随意 hack 源代码,以便实际实现或修复你需要的任何功能。