有时我需要在不通过 VPN 的情况下连接到网站,是否可以打开 Firefox 实例并告诉它使用普通接口eth0
而不是 tun0 ?
答案1
您可以为想要通过 eth0 传递的任何网站添加路由,如下所示:
ip route add websiteIP via gatewayIP dev eth0
在这里,您在 添加您要访问的网站的IP地址websiteIP
,并在 添加您的正常网关IP gatewayIP
。
答案2
不久前,我使用 iptables 做了类似的事情。您的目标和我的项目之间的主要区别在于,我试图将所有来自网络的流量重定向到 tun0。无需对 Firefox 进行任何更改。要点如下:
- 创建自定义条目
rt_tables
来处理某些数据包 - 所有发往端口 80 或特定 IP 的数据包都会被标记
- 所有与步骤 2 中的标记匹配的数据包都将传递到步骤 1 中指定的 rt_table。
- 新数据包
rt_tables
需要有一个与其他数据包不同的网关——eth0 的 IP
我找到了一些我的旧代码,它们应该可以按原样或稍加修改后供您使用。这是我在网关上运行的一组经过稍微修改的代码:
# Create the new custom router table
echo 201 CustomRouter >> /etc/iproute2/rt_tables
# Mark the desired packets for special treatment
iptables -t mangle -A PREROUTING -d 123.123.123.123 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -d 123.123.123.123 -j MARK --set-mark 2
# Assign marked packets to CustomRouter
ip rule add fwmark 2 table CustomRouter
# Set the gateway
ip route add default via 192.168.0.123 dev eth0 table ClientRouter
以上假设 是123.123.123.123
您想要通过 eth0 访问的网站的 IP,192.168.0.123
是 的 IP eth0
。 修改包含该 IP 的两行以匹配您想要的任何内容,无论是端口 80 上的所有内容,还是仅指定一个 IP。 只是123.123.123.123
我用来测试的虚假 IP。
请注意,创建行不必每次都执行。我从中提取CustomRouter
此rt_tables
内容的 perl 脚本会检查它是否已经存在,因此我相信它可能只需执行一次,或者每次启动时都执行一次。
答案3
具有 ip route 和 iptables 的网络规则不能使用程序名称作为条件
如果您只需要将流量路由到 Firefox 的其他接口,而无需将任何请求路由到端口 80,则可以在最新内核上使用网络命名空间。它们限制了进程可用的系统资源(“ip netns”)
以下是一个类似示例的介绍:
http://www.dasblinkenlichten.com/an-introduction-to-network-namespaces/