作弊条:如何用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的数据发送工作了。
警告:远程调试防火墙策略存在风险,您应根据实际情况选择合适的方式来规避此风险(定时重启,或派人蹲点)。