是否可以透明地支持某些主机的 SOCKS5?

是否可以透明地支持某些主机的 SOCKS5?

我可以通过 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

相关内容