Redsocks 및 Dante UDP를 포함한 모든 트래픽을 SOCKS5 프록시로 리디렉션

Redsocks 및 Dante UDP를 포함한 모든 트래픽을 SOCKS5 프록시로 리디렉션

Redoscks를 사용하여 단일 포트에서 Dante를 실행하는 SOCKS5 프록시 서버에 모든 tcp 및 udp 연결을 전달하고 엔터프라이즈 프록시를 통과하도록 Linux(mint/ubuntu) 클라이언트를 설정하고 싶습니다. 지금까지 집에서 HTTP/HTTPS를 리디렉션하는 데 성공했으며(그러므로 중간에 제한적인 엔터프라이즈 프록시가 없음) 테스트에서는 UDP에서 부분적인 성공을 보이는 것 같습니다. ntp와 같은 모든 서비스가 실행될 수 있도록 전체 TCP 및 UDP 리디렉션을 보장하고 싶습니다. 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를 사용하여 TCP와 UDP 모두에서 80과 443을 redsocks로 리디렉션합니다. 또한 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 연결이 있는 것을 확인했습니다. 하지만 포트는 1080이 아닌 48066 및 48610에서 보고되었습니다. 또한 serverius 테스트 서버에 대한 직접 연결도 확인했습니다. 포트는 rfe? 누군가 나에게 이것을 설명해 줄 수 있습니까?

좀 더 잔인하게 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 감사합니다, Nicolas

답변1

Dante 구성에서는 다음과 같이 모든 연결을 차단한 것 같습니다.

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

관련 정보