Redsocks 和 Dante 將所有流量(包括 UDP)重定向到 SOCKS5 代理

Redsocks 和 Dante 將所有流量(包括 UDP)重定向到 SOCKS5 代理

我想設定一個 Linux (mint/ubuntu) 用戶端以使用 Redoscks 將所有 tcp 和 udp 連線傳遞到在單一連接埠上執行 Dante 的 SOCKS5 代理伺服器,以透過企業代理。到目前為止,我已經成功在家中重定向 HTTP/HTTPS(因此中間沒有限制性的企業代理),測試似乎顯示 UDP 取得了部分成功。我想確保完整的 TCP 和 UDP 重定向,以便所有服務(例如 ntp)都可以運行。 DNS 請求重定向也很好。

dante 設定檔如下,設定為允許 udp 關聯,並進行基本使用者驗證。

# /etc/danted.conf
logoutput: syslog
user.privileged: root
user.unprivileged: nobody

internal: veth0  port=1080
external: veth0

socksmethod: username
clientmethod: none

# Rules

client pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: error connect disconnect
}
client block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}
socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        command: bind connect udpassociate
        log: error connect disconnect
        socksmethod: username
}
socks block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}
socks pass {
       from: 0.0.0.0/0 to: 0.0.0.0/0
       command: bindreply udpreply
       log: error # connect disconnect iooperation
}

為了清潔起見,當我從模板中汲取靈感時,我並不真正理解對客戶端區塊襪子塊規則。如果被註解掉,它們似乎不會改變任何東西。我也不明白為什麼要放回去襪子方法:使用者名稱如果全域定義,則在襪子傳遞規則中。註解掉它沒有任何效果。

在客戶端,redsocks設定檔如下

base {
    log_debug = off;
    log_info = on;
    log = "syslog:daemon";
    daemon = on;
    user = redsocks;
    group = redsocks;
    redirector = iptables;
}

redsocks {
    local_ip = 127.0.0.1;
    local_port = 12345;

    ip = myproxyserverIP;
    port = 1080;
    type = socks5;
    login = myproxyuser;
    password = myproxypassword;
}

redudp {
    local_ip = 127.0.0.1;
    local_port = 12345;

    ip = myproxyserverip;
    port = 1080;
    login = myproxyuser;
    password = myproxypassword;

    dest_ip = 8.8.8.8;
    dest_port = 53;

    udp_timeout = 30;
    udp_timeout_stream = 180;
}

dnstc {
    // fake and really dumb DNS server that returns "truncated answer" to
    // every query via UDP, RFC-compliant resolver should repeat same query
    // via TCP in this case.
    local_ip = 127.0.0.1;
    local_port = 5300;
}

然後,我使用 iptables 將 80 和 443 重定向到 redsocks,無論是 TCP 還是 UDP。我還為 iperf 測試伺服器新增了 UDP 5002。

*nat
:PREROUTING ACCEPT [26:3850]
:INPUT ACCEPT [2:178]
:OUTPUT ACCEPT [8:3456]
:POSTROUTING ACCEPT [10:6452]
:REDSOCKS - [0:0]
-A PREROUTING -p tcp -m tcp --dport 443 -j REDSOCKS
-A PREROUTING -p tcp -m tcp --dport 80 -j REDSOCKS
-A PREROUTING -p udp -m udp --dport 443 -j REDSOCKS
-A PREROUTING -p udp -m udp --dport 80 -j REDSOCKS
-A PREROUTING -p udp -m udp --dport 5002 -j REDSOCKS
-A OUTPUT -p tcp -m tcp --dport 443 -j REDSOCKS
-A OUTPUT -p tcp -m tcp --dport 80 -j REDSOCKS
-A OUTPUT -p udp -m udp --dport 443 -j REDSOCKS
-A OUTPUT -p udp -m udp --dport 80 -j REDSOCKS
-A OUTPUT -p udp -m udp --dport 5002 -j REDSOCKS
-A REDSOCKS -d 0.0.0.0/8 -j RETURN
-A REDSOCKS -d 10.0.0.0/8 -j RETURN
-A REDSOCKS -d 127.0.0.0/8 -j RETURN
-A REDSOCKS -d 169.254.0.0/16 -j RETURN
-A REDSOCKS -d 172.16.0.0/12 -j RETURN
-A REDSOCKS -d 192.168.0.0/16 -j RETURN
-A REDSOCKS -d 224.0.0.0/4 -j RETURN
-A REDSOCKS -d 240.0.0.0/4 -j RETURN
-A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
-A REDSOCKS -p udp -j REDIRECT --to-ports 12345
COMMIT

*filter
:INPUT ACCEPT [4510:4209873]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6689:7022488]
COMMIT

從那時起,它似乎起作用了。瀏覽網路是可行的,如果我

curl ifconfig.co

我得到了代理伺服器位址。

如果我嘗試測試 udp 連接,

iperf -c speedtest.serverius.net -u -p 5002

並嘗試查看活動的 udp 連線(儘管是無狀態的)

ss -u -pa

我看到有一個到我的代理伺服器的 udp 連接,儘管它們在連接埠 48066 和 48610 上報告,而不是 1080。有人可以跟我解釋一下嗎?

如果我嘗試更殘酷一點,並告訴 iptables 路由所有流量,則一切都不再起作用,我無法連接到任何東西。我一定做錯了什麼。

*nat
:PREROUTING ACCEPT [26:3850]
:INPUT ACCEPT [2:178]
:OUTPUT ACCEPT [8:3456]
:POSTROUTING ACCEPT [10:6452]
:REDSOCKS - [0:0]
-A PREROUTING -p tcp -m tcp -j REDSOCKS
-A PREROUTING -p udp -m udp -j REDSOCKS
-A OUTPUT -p tcp -m tcp -j REDSOCKS
-A OUTPUT -p udp -m udp -j REDSOCKS
-A REDSOCKS -d 0.0.0.0/8 -j RETURN
-A REDSOCKS -d 10.0.0.0/8 -j RETURN
-A REDSOCKS -d 127.0.0.0/8 -j RETURN
-A REDSOCKS -d 169.254.0.0/16 -j RETURN
-A REDSOCKS -d 172.16.0.0/12 -j RETURN
-A REDSOCKS -d 192.168.0.0/16 -j RETURN
-A REDSOCKS -d 224.0.0.0/4 -j RETURN
-A REDSOCKS -d 240.0.0.0/4 -j RETURN
-A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
-A REDSOCKS -p udp -j REDIRECT --to-ports 12345
COMMIT

*filter
:INPUT ACCEPT [4510:4209873]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6689:7022488]
COMMIT

非常感謝您的幫助,我的大腦正在融化:p謝謝你,尼古拉斯

答案1

在但丁配置中,我認為您阻止了所有連接,如下所示

client block {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect error
}

相關內容