Answers:
为什么系统偏好设置->网络->(在窗口左侧选择一个网络,然后在右下角选择“高级”)->代理(顶部的选项卡)为您服务?
如果您可以设置自己的SSH服务器,那么免费的Shuttle可以通过连接建立所有TCP通信的隧道,从而为您完成所有防火墙工作。
要将所有TCP通信和DNS请求转发到远程SSH服务器,该命令非常简单:
sshuttle --dns -vr ssh_server 0/0
除TCP和DNS外,Sshuttle不会转发其他请求,例如UDP,ICMP,Ping等。
有关更多信息和示例,请参阅文章在日常工作中使用Sshuttle。
虽然设置系统范围的代理设置是一个好的开始,但是您可能还希望研究使用iptables以确保所有流量都通过代理。某些应用程序不使用系统范围的配置设置(其中包括Firefox),因此必须调整规则以不允许直接连接,而只能通过代理路由通信。
编辑:虽然我个人使用iptables
规则来管理VPN中潜在的“泄漏”,但实际上我最初被误认为iptables可以直接与袜子代理一起使用。您需要类似tun2socks之类的东西才能创建虚拟隧道接口(例如vpn的用法)。
之后,您可以设置类似于以下内容的iptables脚本:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# name of primary network interface (before tunnel)
PRIMARY=eth0
# gateway ip address (before tunnel - adsl router ip address)
# automatically determine the ip from the default route
GATEWAY=`route -n | grep $PRIMARY | egrep "^0\.0\.0\.0" | tr -s " " | cut -d" " -f2`
# provided by tun2socks: interface name
TUNNEL=tun0
# If you'd like, putting the tun2socks command here is a good idea. It may or may not be necessary to do so, but either way is more convenient than running the two commands separately.
# iptables rules - important!
LOCAL_NET=192.168.0.0/16
#LOCAL_NET=$GATEWAY
# Flush all previous filter rules, you might not want to include this line if you already have other rules setup
iptables -t filter --flush
iptables -t filter -X MYVPN
iptables -t filter -N MYVPN
# Add local routes to routing table
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
route add -host 23.21.163.237 dev eth0 gw 192.168.1.1
# Add ssh routes to routing table
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1
# Exceptions for local traffic & vpn server
iptables -t filter -A MYVPN -o lo -j RETURN
iptables -t filter -A MYVPN -o ${TUNNEL} -j RETURN
iptables -t filter -A MYVPN --dst 127.0.0.1 -j RETURN
iptables -t filter -A MYVPN --dst $LOCAL_NET -j RETURN
iptables -t filter -A MYVPN --dst ${SERVER} -j RETURN
iptables -t filter -A MYVPN --dst ${VPN_SERVER} -j RETURN
# Add extra local nets here as necessary
iptables -t filter -A MYVPN -j DROP
# MYVPN traffic leaving this host:
iptables -t filter -A OUTPUT -p tcp --syn -j MYVPN
iptables -t filter -A OUTPUT -p icmp -j MYVPN
iptables -t filter -A OUTPUT -p udp -j MYVPN
自然,您需要使此脚本反映您的特定网络(即,如果您使用的是192.168.0.0/24子网之类的内容,请进行相应调整)。而且,它非常紧密地基于我与VPN一起使用的脚本,因此,所有提到的MYVPN或VPN都有效-尽管您未使用VPN,但tun2socks
实际上却表现得很正常,因此所有功能都应相同。
特别感谢Unix.SE 上的这个答案,它引导我朝着正确的方向回答这个问题。
再次编辑:因此,看起来OS X实际上将使用ipfw
iptables而不是iptables 来完成此操作(对不起,我主要是Linux人士,并且认为OS X具有iptables可用)。有一些等效之处可以修改脚本,此处指出了其中一些。 man ipfw
应该让您直接了解语法。我将原始iptables
脚本保留为模板,以便您可以了解概念上的变化。 WaterRoof看起来像是它可以使使用起来ipfw
更加用户友好。其他前端也可能可用。
tun2socks
不需要SSH和服务器;他们网站上的示例首先是使用SSH创建SOCKS代理的。如果您已经拥有SOCKS代理,则完全没有必要。是的,iptables
这对我来说是错误的方式。基于BSD的OS X使用ipfw
而不是iptables
Linux内核的。至于它的复杂性,您也许可以找到一个可以以更易于使用的方式为您设置的前端,但是我对此没有经验。无论如何,它在低层次上都很复杂,这与它为什么能够胜任这项工作有很大关系。
ipfw
。
有许多解决方案可用。它们都不是更改某些设置那么简单:原因是这样做违反了代理的全部目标,即通过离开而通过一条不同的路由(出于隐身,安全性,身份保护等目的)路由某些特定应用程序。您可以访问(据说速度更快)本地路由。
有些是出于您的要求而丢弃的,但是为了完整起见,我仅提及它们:VPN,SSH隧道,使用pfctl(数据包过滤器和NAT控制接口)。同样,Tor虽然绝对不是为您考虑的用途而设计的,但仍允许您通过其代理路由所有流量。
所有这些应用程序都是免费的,并且最多需要一些独创性才能使其运行。另一方面,存在付费应用程序,其中大部分工作是由其他人完成的,尽管要付出一定的代价。
使您可以通过代理服务器重定向计算机的网络连接。您可以告诉ProxyCap哪些应用程序将通过代理连接到Internet,以及在什么情况下。这是通过用户友好的界面完成的,而无需重新配置任何Internet客户端
另外,还有Proxifier for Mac(注意:仅支持到10.8)。哪一个
允许不支持通过代理服务器工作的网络应用程序通过SOCKS或HTTPS代理和链进行操作。