从这里启发的问题
设想
我住在大学附近的一所房子里。也就是说,学生 wifi 可以到达我家,所以我通常即使在家也使用它。问题是,作为由大学系统管理员管理的 wifi,无法连接到某些 dns(例如文件上传域,如 rapidshare 或 megaupload)。好消息是我还有一个可以使用的 USB 互联网密钥,但是,基本上这就像意大利的所有互联网移动计划一样是一个骗局,因为在 20GB 之后他们会切断我的带宽。
最后……问题
为了优化我的带宽使用,我想对我的 Ubuntu 说:如果我连接到 *.domain.com 使用这个接口,否则使用另一个。为了这个问题,我们称之为 wifiwlan0
和 usb internet key ppp0
。
PS:这是一个非常具体的问题。不要建议诸如“使用 Tor,伙计”之类的东西。我不想滥用大学的wifi。我实际上不知道 Tor 是否可以做到这一点……但仍然…… :)
如果您的示例域“*.domain.com”具有静态 IP 地址块,则可以向路由表添加静态路由,例如:
这应该会为您提供一些 domain.com 所有者的联系信息。您可以联系他们以了解他们的网络地址。此地址可能采用 CIDR 格式,其中:192.168.0.0/24 ==“从 192.168.0.1 到 192.168.0.254 的 IP 地址集”。斜线后面的数字是地址网络部分的位数。这相当于网络掩码 255.255.255.0。
您还可以使用
dig
查找一些主机地址并尝试从中推断出网络块,或者只是添加到离散主机的路由,但我不推荐这样做。有了地址信息,您就可以像这样添加静态路由:
IRL 它可能不会完全像这样工作,请查阅 ip 命令或 route 命令的手册页(这些是执行相同操作的不同命令,route 较旧并且是 coreutils 的一部分)以了解如何正确执行。
如果域的地址不是静态的(例如由 DHCP 配置),这对于具有持久 A 记录的站点来说似乎不太可能,您可以将上述方法用于以比站点的 DHCP 租约更短的时间间隔运行的 cron 作业。您可能必须联系该站点的管理员以获取此信息,或者只是进行试验。如果该作业每天运行一次,那可能会足够频繁。
你的大学网络上有网络代理吗?如果是这样,请将其用于正常的网页浏览,但不要访问被阻止的站点。
否则,这是可能的,但不是很容易。路由(即决定将数据包发送到哪里)是在IP级别执行的,它只知道 IP 地址。另一方面,您的路由要求基于主机名,但知道名称的层无法控制路由。
我认为任何解决方案都将涉及网络代理。(我假设对于其他协议,您将始终使用特定的网络。)网络代理本身除了中继请求之外不会做任何事情,所以任何都会做:一个大的(
squid
),一个专门用于缓存 (wwwoffle
)、一个简单的小缓存 ( )tinyproxy
等 (aptitude search web proxy; aptitude search http proxy
)。现在,对于我提出的解决方案(可能还有其他方式),不要以任何特殊方式配置您的代理(即让它中继所有请求),而是以专用用户身份运行它:创建一个
alt-routed
没有特殊的用户权限,并安排代理以该用户身份运行。然后,创建
wlan0
默认路由。然后设置iptables并安装iproute
包。您想要的规则是将来自作为接口运行的进程的传出数据包定向alt-route-user
到ppp0
接口。没有直接的方法可以做到这一点,但可以通过以下方式完成:alt-routed
;如果我正确理解文档,这应该有效:
请注意,这远远超出了我对这些工具的常用用法,因此我可能完全错误地理解了这些命令。欢迎确认或更正。
您运行的任何程序都
alt-routed
将通过ppp0
而不是默认的wlan0
.最后,将您的浏览器配置为通过您要访问的站点的代理
ppp0
,而不是通过您要访问的站点的代理wlan0
。有几种方法可以做到这一点,具体取决于您的目标浏览器以及您是否需要 GUI 或愿意编辑配置文件。