如何使用 socks5 代理设置热点

如何使用 socks5 代理设置热点

我有一台安装了linux的笔记本,笔记本有两个网络接口eth0和wlan0,平时我都是通过eth0上网的,在linux中已经成功设置了热点,供kindle使用,重要代码如下:

# Enable NAT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Run access point daemon
sudo hostapd /etc/ap-hotspot.conf

平时上网一般会通过加密的socks5代理:127.0.0.1:10000,而且希望全系统都使用这个代理,所以安装了redsocks,可以把所有的TCP连接都重定向到socks5代理,重要代码如下:

#redsocks requires all the data to be redirected to port 12345, and the socks5 address and port(127.0.0.1:10000) has been written to redsocks's configuration file.
sudo iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 12345

到目前为止,一切似乎都运行良好。我的 kindle 可以连接到热点,我可以通过 Linux 中的系统范围代理上网。问题是,我的 kindle 绕过了 socks5 代理并直接连接到互联网。那么如何让我的 kindle 在使用热点时通过代理呢?我的意思是,如何在 Linux 中做到这一点,因为没有办法在我的 kindle 中设置代理。

答案1

我有一个类似的设置。wlan0连接到互联网(通过我的路由器),同时wlan1充当我的Android手机的热点(接入点)。wlan1设置了ipv4地址10.0.0.1/24,即我的手机在10.0.0.x范围内获取ip地址。

我用来通过 redsocks 传输手机所有流量的 iptables 规则是:

sudo iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p tcp -j REDIRECT --to-ports 12345

据我了解,该规则基本上会获取来自任何具有地址的源设备的所有 TCP 流量10.0.0.0/24,并将其重定向到12345通过的端口redsocks

答案2

我没有使用过 hostapd,但它可能会修改路由表(甚至可能是 iptables)。

启动 hostapd 后,最好运行

网络状态监测

iptables -t nat -L

iptables -t 过滤器 -L

并尝试找出数据包的目的地。

然后,启动你的 redsocks 并重新查看完整的 iptables 设置

让我知道这些输出,我也许能帮忙

答案3

对我来说,redsocks 与“socks5”代理一起工作,对于“http”代理,我用“transocks”替换它,我的 iptables 配置如下所示:

#!/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

相关内容