Я хочу настроить клиент Linux (mint/ubuntu) на использование Redoscks для передачи всех соединений TCP и UDP на прокси-сервер SOCKS5, работающий под управлением Dante, на одном порту, для передачи через корпоративный прокси. До сих пор у меня были успехи в перенаправлении 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
}
Чистоты ради, поскольку я черпаю вдохновение из шаблонов, я не совсем понимаю необходимостьблок клиентаиноски блокправила. Они, кажется, ничего не меняют, если их закомментировать. Я также не понимаю, зачем возвращатьsocksmethod:имя пользователяв правиле передачи носков, если оно определено глобально. Закомментирование не имеет никакого эффекта.
На клиенте файлы конфигурации 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. Я также добавляю UDP 5002 для тестового сервера iperf.
*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. Я также вижу прямое подключение к тестовому серверу 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 Спасибо, Николас
решение1
В конфигурации Dante, я думаю, вы заблокировали все соединения, как в
client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}