ICQ,这个即时通讯客户端现在属于 AOL 公司,多年来已经发生了变化。所有现代 ICQ 客户端都对 NAT 友好,因此不需要任何特殊的 NAT 模块、PORTFW 技巧等。
如果出于某种原因,您想运行旧的 ICQ 客户端,您可以阅读本节。如果不是,请忽略所有这些信息。我将此信息保留在 HOWTO 中,以演示一个大型的 PORTFW 示例。
有三种方法可以让 ICQ 在 Linux MASQ 服务器后面工作。这些解决方案包括使用 ICQ Masq 模块(用于 2.2.x 和 2.0.x 内核)、使用 IPPORTFW 实现基本的 ICQ 功能,或设置 SOCKS 代理服务器。
模块:ICQ 模块是为旧一代 ICQ 客户端编写的,适用于 2.2.x 和 2.0.x 内核。此模块允许在 MASQ 服务器后面简单地设置多个 ICQ 用户。它也不需要对 ICQ 客户端进行任何特殊更改。最近,AOL 更改了 ICQ 使用的协议和端口。因此,许多用户可能会发现 ip_masq_icq 模块不再对他们有帮助。对于旧 ICQ 客户端的用户,2.2.x 版本的模块支持文件传输和实时聊天。2.0.x 内核模块不支持文件传输,并且没有适用于 2.4.x 内核的模块。
PORTFW:您的下一个选择是使用端口转发。使用端口转发,基本的 ICQ 聊天可以工作,但文件传输可能不是很可靠。请参阅下文,了解如何配置 ICQ PORTFW 的示例。
SOCKS:最后,您的最后一个,也可能是最好的选择是在您的 Linux 机器上设置 SOCKS 代理服务器。此服务可以与 MASQ 服务共存,并且无论您运行的是哪个 Linux 内核版本,ICQ 都应该完全正常工作。使用 SOCKS 服务器将需要重新配置所有 ICQ 客户端以使用它,并且 SOCKS 服务器的安装和配置与 IP Masquerade 无关。因此,本 HOWTO 中不涵盖 SOCKS。
如果您对 Andrew Deryabin 的 djsf@usa.net ICQ IP Masq 模块(适用于 2.2.x 和 2.0.x 内核)感兴趣,请参阅 第 2.7 节 了解详细信息。
要使用端口转发 (PORFW) 来配置 ICQ,您需要在 Linux 和 ICQ 客户端上进行一些更改,但所有 ICQ 消息、URL、聊天和一些文件传输都应该可以工作。
首先,您需要运行一个启用了 IPPPORTFW 的 Linux 内核。请参阅 第 6.7 节 了解更多详细信息。
接下来,您需要将以下行添加到您的 /etc/rc.d/rc.firewall-* 文件中。此示例假设 10.1.2.3 是您的外部 Internet IP 地址,而您的内部 MASQ ICQ 机器是 192.168.0.10
以下示例适用于具有 IPCHAINS 的 2.2.x 内核
我在这里为用户包含了两个示例:任何一个都可以正常工作
示例 #1
/usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2000 -R 192.168.0.10 2000 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2001 -R 192.168.0.10 2001 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2002 -R 192.168.0.10 2002 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2003 -R 192.168.0.10 2003 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2004 -R 192.168.0.10 2004 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2005 -R 192.168.0.10 2005 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2006 -R 192.168.0.10 2006 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2007 -R 192.168.0.10 2007 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2008 -R 192.168.0.10 2008 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2009 -R 192.168.0.10 2009 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2010 -R 192.168.0.10 2010 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2011 -R 192.168.0.10 2011 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2012 -R 192.168.0.10 2012 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2013 -R 192.168.0.10 2013 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2014 -R 192.168.0.10 2014 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2015 -R 192.168.0.10 2015 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2016 -R 192.168.0.10 2016 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2017 -R 192.168.0.10 2017 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2018 -R 192.168.0.10 2018 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2019 -R 192.168.0.10 2019 /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 2020 -R 192.168.0.10 2020 |
port=2000 while [ $port -le 2020 ] do /usr/local/sbin/ipmasqadm portfw -a -P tcp -L 10.1.2.3 $port -R 192.168.0.10 $port port=$((port+1)) done |
以下示例适用于具有 IPFWADM 的 2.0.x 内核
我在这里为用户包含了两个示例:任何一个都可以正常工作
示例 #1
/usr/local/sbin/ipportfw -A -t10.1.2.3/2000 -R 192.168.0.10/2000 /usr/local/sbin/ipportfw -A -t10.1.2.3/2001 -R 192.168.0.10/2001 /usr/local/sbin/ipportfw -A -t10.1.2.3/2002 -R 192.168.0.10/2002 /usr/local/sbin/ipportfw -A -t10.1.2.3/2003 -R 192.168.0.10/2003 /usr/local/sbin/ipportfw -A -t10.1.2.3/2004 -R 192.168.0.10/2004 /usr/local/sbin/ipportfw -A -t10.1.2.3/2005 -R 192.168.0.10/2005 /usr/local/sbin/ipportfw -A -t10.1.2.3/2006 -R 192.168.0.10/2006 /usr/local/sbin/ipportfw -A -t10.1.2.3/2007 -R 192.168.0.10/2007 /usr/local/sbin/ipportfw -A -t10.1.2.3/2008 -R 192.168.0.10/2008 /usr/local/sbin/ipportfw -A -t10.1.2.3/2009 -R 192.168.0.10/2009 /usr/local/sbin/ipportfw -A -t10.1.2.3/2010 -R 192.168.0.10/2010 /usr/local/sbin/ipportfw -A -t10.1.2.3/2011 -R 192.168.0.10/2011 /usr/local/sbin/ipportfw -A -t10.1.2.3/2012 -R 192.168.0.10/2012 /usr/local/sbin/ipportfw -A -t10.1.2.3/2013 -R 192.168.0.10/2013 /usr/local/sbin/ipportfw -A -t10.1.2.3/2014 -R 192.168.0.10/2014 /usr/local/sbin/ipportfw -A -t10.1.2.3/2015 -R 192.168.0.10/2015 /usr/local/sbin/ipportfw -A -t10.1.2.3/2016 -R 192.168.0.10/2016 /usr/local/sbin/ipportfw -A -t10.1.2.3/2017 -R 192.168.0.10/2017 /usr/local/sbin/ipportfw -A -t10.1.2.3/2018 -R 192.168.0.10/2018 /usr/local/sbin/ipportfw -A -t10.1.2.3/2019 -R 192.168.0.10/2019 /usr/local/sbin/ipportfw -A -t10.1.2.3/2020 -R 192.168.0.10/2020 |
示例 #2
port=2000 while [ $port -le 2020 ] do /usr/local/sbin/ipportfw -A t10.1.2.3/$port -R 192.168.0.10/$port port=$((port+1)) done |
一旦您的新 rc.firewall-* 准备就绪,请重新加载规则集,以通过简单地输入 "/etc/rc.d/rc.firewall-*" 来确保一切正常。如果您收到任何错误,则要么您的内核中没有 IPPORTFW 支持,要么您在 rc.firewall 文件中输入了错误。
现在,在 ICQ 的“偏好设置”-->“连接”中,将其配置为“在 LAN 后面”和“在防火墙或代理后面”。现在,单击“防火墙设置”,并将其配置为“我不使用 SOCK5 代理”。另请注意,以前建议将 ICQ 的“防火墙会话超时”更改为“30”秒,但是许多用户发现 ICQ 变得不可靠。已经发现,ICQ 在其默认超时设置下(不要启用该 ICQ 选项)更可靠,只需将 MASQ 的超时更改为 160 秒即可。您可以在 第 3.4.3 节 和 第 3.4.2 节 规则集中查看如何更改此超时。最后,单击“下一步”,并将 ICQ 配置为“使用以下 TCP 监听端口...”从“2000”到“2020”。现在单击“完成”。
现在 ICQ 会告诉您,您必须重新启动 ICQ 才能使更改生效。老实说,我必须重新启动 Windows9x 机器才能使事情正常工作,但有些用户可能会有不同的看法。所以.. 两种方法都试试。
一位用户曾经告诉我,通过简单地将端口 4000 端口转发到他的 ICQ 机器,它就可以完美地工作。他报告说,一切都工作正常(甚至包括聊天、文件传输等),而无需从其默认设置重新配置 ICQ。您的情况可能会有所不同,但我认为您可能想了解这种替代配置。