3. 更深入的版本

编译内核: (使用 2.4.x 或更高版本的内核)

内核中需要以下支持

首先,如果 iptable 和 masq 模块没有编译到内核中且未安装,但作为模块存在,我们需要安装它们。 如果您使用 insmod ipt_MASQUERADE,它将加载 ip_tables、ip_conntrack 和 iptable_nat。

$> modprobe ipt_MASQERADE

现在,无论是您的 Intranet 很大,还是您只是想让两三台机器在互联网上工作 - 这两种情况没有太大区别。

好的,我假设您没有其他规则,所以请执行

$> iptables -F; iptables -t nat -F; iptables -t mangle -F

如果您收到错误提示找不到 iptables,请找到并安装它。 如果提示没有名为 'nat' 的表,请重新编译内核并启用 nat 支持。 如果提示没有名为 'mangle' 的表,请不用担心,这对于 MASQ'ing 不是必需的。 如果提示 iptables 与您的内核不兼容,请获取 > 2.4 的内核并编译它,启用 iptables 支持。

那么,如果您有静态 IP,请执行 (例如,网卡不使用 DHCP)

$> iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43

或者对于动态 IP (例如,调制解调器 - 您必须先拨号)

$> iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

最后,告诉内核您确实要开始转发数据包: (这只需要在每次重启后执行一次 - 但多次执行也无妨)

$> echo 1 > /proc/sys/net/ipv4/ip_forward

一旦您检查所有这些都工作正常 (请参阅“安装后”部分),则仅允许来自内部网络的伪装 - 毕竟您不希望允许互联网上的人使用它 :)

首先,允许任何现有连接或任何相关连接 (例如,ftp 服务器连接回您)

$> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

如果这出现错误,则您很可能在内核中没有状态跟踪 - 请重新编译。 然后仅允许来自我们 Intranet (本地/内部网络) 的新连接。 将 ppp0 替换为 eth0 或您的外部设备。 (! 表示“除了”)

$> iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT

现在拒绝其他所有内容

$> iptables -P INPUT DROP   #only if the first two are succesful

如果前两条规则中的任何一条失败,那么最后这条规则将完全阻止伪装工作。 要撤消此规则,请执行 "iptables -P INPUT ACCEPT"。