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