delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

24 Mar 2007

作弊条:如何用pf实现基于源地址的发出流量分网卡/网关路由

我想这可能是很多人比较关心的问题,特别是希望用一台机器,多块网卡,甚至有多个网关来实现伪双线的同学。

默认情况下FreeBSD系统中配置的网关,是不会自动使用多个网卡的。网关会与某一块网卡关联,并且,默认网关只能有一个。

但是,我们经常会遇到一些比较复杂的情况。例如,你有两块网卡,并且都接入了同一个网段,使用同一个网关,此时,所有的流量都会从一块网卡出去,另一块网卡则没有出流量;另一种比较极端的情况是,你有网通、电信各一个IP,但只有1台机器,而且机房也不给做BGP(当然,这是伪双线,我个人强烈建议不要使用这种机房服务),标准的路由方式就不太好用了。这时候,我们可以借助 FreeBSD 内建的 pf (通过route-to规则)来完成一些比较复杂的功能。

这个规则非常简单,只需要1行:

pass out quick route-to ( 网卡 网关IP ) from 网卡上的那个IP to any

这个规则的意思是,如果遇到网卡上的那个IP名义发出的数据,系统应通过pf指定下一跳路由:通过那块网卡,发送到指定的那个网关。

注意,绑定IP时,子网掩码需要正确设置,以涵盖网关所在的网络。

启动pf之后,就可以让两块网卡分别做自己身上绑定的IP的数据发送工作了。

警告:远程调试防火墙策略存在风险,您应根据实际情况选择合适的方式来规避此风险(定时重启,或派人蹲点)。