我可以通过 SSH 访问我工作地点的跳转盒。此跳转盒可访问工作地点的完整网络基础设施。这对于在家办公来说非常棒。
我可以在跳转盒上运行 SOCKS5 代理(通过ssh -D
),并成功配置我的浏览器以使用该 SOCKS5 代理访问工作主机(通过https://getfoxyproxy.org)。Foxyproxy 似乎将 DNS 请求转发到该 SOCKS5 代理,因此一切运行正常。
虽然这一切都运行良好,但我想知道是否有可能让我的系统以更透明的方式使用 SOCKS5 进行与工作相关的流量。对于我使用的每个应用程序,弄清楚它是否支持 SOCKS5 以及如何支持,这非常耗费精力。
更具体地说,有没有办法配置我的系统,使其自动通过 SOCKS5 为预定义主机路由流量?
我知道有诸如 proxychains 之类的工具(请参阅https://github.com/haad/proxychains),但这不是我想要的。这会路由应用到代理,而我想将所有流量路由到主持人如果有意义的话,发送给代理。
这可能吗?
供您参考,我在这里询问了有关 DNS 请求的相关问题:将 DNS 请求转发到我工作的跳转服务器。将这个问题与 DNS 问题结合起来,我希望最终找到一种完全透明的工作交互方式。
答案1
这是技术上有可能,但请注意 SOCKS 仅支持 TCP 隧道(并且在稀有的UDP)。 其他任何内容都必须删除。
如果你使用 Linux,你可以使用 iptables 将特定数据包重定向到本地运行的透明代理,其中有几种支持 SOCKS 的——谷歌给出转运袜子,红袜队,pr0cks。
(基于 Tor 的“Tails”操作系统也使用了同样的技巧,但透明代理功能现已内置于 Tor 守护进程本身 - 不再涉及单独的 SOCKS 层。)
对于不支持此类“透明代理”的操作系统,这仍然是可能的,但软件可能会变得相当复杂 - 它可以创建一个虚拟 TUN 接口,数据包可以路由到该接口,但它需要自己处理整个客户端 TCP 协议,而无需操作系统的任何帮助。(SOCKS 实际上并不中继原始 TCP 数据包,它只中继内部携带的数据。)
答案2
也许看看socksify
。如果您的办公室代理使用 Dante,它可能会运行得特别好,但对于其他设置也应该没问题。
答案3
您还可以查看TS 经纱. 适用于 Linux、*BSD、mac。
答案4
我在用transocks
。我的 IP 表配置看起来像这样:
#!/usr/bin/bash
# Transocks: https://github.com/cybozu-go/transocks
set -e
stty -echoctl
# Point to the transparent socket port (running in an exclusive user)
TRANSOCKS_PORT=12345
TRANSOCKS_USER=transocks
# Redirect all the network of your computer (except transocks user)
REDIRECT_LOCAL_NETWORK=1
# Redirect access point (wifi hotspot)
AP_SUBNET_ENABLED=1
AP_SUBNET_IFACE=ap0
AP_SUBNET_RANGE="192.168.12.0/24"
function action_up()
{
echo "-----------------------------"
echo "# Adding iptables chain rules"
echo "-----------------------------"
iptables -v -t nat -N TRANSOCKS
iptables -v -t nat -A TRANSOCKS -d 0.0.0.0/8 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 10.0.0.0/8 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 100.64.0.0/10 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 127.0.0.0/8 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 169.254.0.0/16 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 172.16.0.0/12 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 192.168.0.0/16 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 198.18.0.0/15 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 224.0.0.0/4 -j RETURN
iptables -v -t nat -A TRANSOCKS -d 240.0.0.0/4 -j RETURN
iptables -v -t nat -A TRANSOCKS -p tcp -j REDIRECT --to-ports $TRANSOCKS_PORT
if [ "$REDIRECT_LOCAL_NETWORK" = 1 ]; then
echo "--------------------------------"
echo "# Redirecting non-transocks user"
echo "--------------------------------"
iptables -v -t nat -A OUTPUT -p tcp -m owner ! --uid-owner $TRANSOCKS_USER -j TRANSOCKS
fi
if [ "$AP_SUBNET_ENABLED" = 1 ]; then
echo "-----------------------"
echo "# Redirecting AP subnet"
echo "-----------------------"
iptables -v -t nat -I PREROUTING -i $AP_SUBNET_IFACE -s $AP_SUBNET_RANGE -j TRANSOCKS
iptables -v -I INPUT -i $AP_SUBNET_IFACE -s $AP_SUBNET_RANGE -p tcp -m tcp --dport $TRANSOCKS_PORT -j ACCEPT
fi
}
function action_down()
{
if [ "$REDIRECT_LOCAL_NETWORK" = 1 ]; then
echo "------------------------------"
echo "# Cleaning non-transocks rules"
echo "------------------------------"
iptables -v -t nat -D OUTPUT -p tcp -m owner ! --uid-owner $TRANSOCKS_USER -j TRANSOCKS
fi
if [ "$AP_SUBNET_ENABLED" = 1 ]; then
echo "--------------------------"
echo "# Cleaning AP subnet rules"
echo "--------------------------"
iptables -v -t nat -D PREROUTING -i $AP_SUBNET_IFACE -s $AP_SUBNET_RANGE -j TRANSOCKS
iptables -v -D INPUT -i $AP_SUBNET_IFACE -s $AP_SUBNET_RANGE -p tcp -m tcp --dport $TRANSOCKS_PORT -j ACCEPT
fi
echo "-----------------------------"
echo "# Cleaning and removing chain"
echo "-----------------------------"
iptables -v -F TRANSOCKS -t nat
iptables -v -X TRANSOCKS -t nat
}
trap 'action_down' SIGINT
action_up
echo
echo "Hit Ctrl+C to remove the ip table rules"
echo
while :
do
sleep 1
done