我正在尝试configuration一个为几百个用户提供Internet的路由器。 该路由器configuration有4个基本电缆上行链路,全部使用DHCP,容量大约为10/1 Mbps。
路由器有3个接口:
IP路由,IP规则和iptables的细节可以在这里find : http : //pastebin.com/Qi3KBR79
VLAN编号为24〜27,对应的路由表中编号相同。 每个路由表都包含eth0,eth1和eth2.X的链接级别条目,以及DHCP服务器给出的默认路由。 请注意,有可能是2个调制解调器在同一个子网上。
我使用CONNMARK和IP规则来标记连接并将它们redirect到调制解调器特定的路由表。 我也有一个dhclient挂钩,负责在DHCP租约更新时更新这些辅助路由表。
对于INPUT和FORWARD,缺省的iptables策略是DROP,而对于OUTPUT则是ACCEPT。 请注意,ip规则部分将fwmarks 3和4redirect回到调制解调器1和2,但这是暂时的,因为其他2个调制解调器仍然在传递来自用户的stream量(我们不能完全断开它们…)
现在所有这些说,这个解决scheme有点作用,但展品约50%的数据包丢失,无论select的上行链路: – /有人能告诉我什么是我做错了? 我一直在这个问题上捅了好几个小时,现在变得非常沮丧…
在此先感谢 – 托马斯
我认为我发现了问题: CONNMARK 。 在mangle-PREROUTING ,似乎--restore-mark只为下一个表设置标记,所以后面的规则匹配--mark=0并为每个数据包设置一个新的标记。
解决办法是只标记匹配 – --state NEW数据包。 但是我们也决定客户访问网站时应该有一致的IP,否则一些应用程序,特别是电子银行,就会失败。
所以最后标记是在IP的基础上完成的,我们的源码池分割成多个/ 25个子网。
HTH!
托马斯