Есть ubuntu server и несколько машин в локалке. Настраиваю redsocks. Нужно чтобы каждая машина в локалке бегала через свою сокс5 прокси.
В настрйоках redsocks можно указать разные порты для разных машин. TCP трафик я заворачиваю как и нужно. Тут все работает. Есть проблема с dns запросами.
dns в redsocks бегает через tcpdns.
Код: Выделить всё
redsocks {
local_ip = 0.0.0.0;
local_port = 12345;
ip = xxx.xxx.xxx.xxx;
port = 5050;
type = socks5;
autoproxy = 0;
timeout = 10;
// login = "foobar";// field 'login' is reused as encryption
// method of shadowsocks
// password = "baz";
}
redsocks {
local_ip = 0.0.0.0;
local_port = 12346;
ip = xxx.xxx.xxx.xxx;
port = 8000;
type = socks5;
autoproxy = 0;
timeout = 10;
login = "xxxx";// field 'login' is reused as encryption
// method of shadowsocks
password = "xxxx";
}
tcpdns {
// Transform UDP DNS requests into TCP DNS requests.
// You can also redirect connections to external TCP DNS server to
// REDSOCKS transparent proxy via iptables.
local_ip = 0.0.0.0; // Local server to act as DNS server
local_port = 1153; // UDP port to receive UDP DNS requests
tcpdns1 = 8.8.4.4; // DNS server that supports TCP DNS requests
tcpdns2 = 8.8.8.8; // DNS server that supports TCP DNS requests
timeout = 4; // Timeout value for TCP DNS requests
}
Следовательно udp трафик от локальных машин я заворачиваю на порт 1153. И дальше по tcp запрашивает DNS.
Код: Выделить всё
iptables -t nat -N REDSOCKS
iptables -t nat -N REDSOCKS_FILTER
iptables -t nat -I REDSOCKS_FILTER -o lo -j RETURN
iptables -t nat -A REDSOCKS_FILTER -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS_FILTER -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS_FILTER -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS_FILTER -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS_FILTER -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS_FILTER -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS_FILTER -d 240.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS_FILTER -s 10.10.10.2 -j REDSOCKS #тачка 1
iptables -t nat -A REDSOCKS_FILTER -s 10.10.10.3 -j REDSOCKS #тачка 2
iptables -t nat -A REDSOCKS -p tcp -s 10.10.10.2 -j REDIRECT --to-port 12345 #тачка 1
iptables -t nat -A REDSOCKS -p tcp -s 10.10.10.3 -j REDIRECT --to-port 12346 #тачка 2
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS_FILTER
iptables -t nat -A PREROUTING -p tcp -j REDSOCKS_FILTER
iptables -t nat -A PREROUTING -p udp -s 10.10.10.2 --dport 53 -j REDIRECT --to-port 1153 #тачка 1
iptables -t nat -A PREROUTING -p udp -s 10.10.10.3 --dport 53 -j REDIRECT --to-port 1153 #тачка 2
При вот такой настройке фейрвола, он сервер запрашивает DNSы со своего внешнего IP.
А нужно завернуть запросы от сервера через порт 12345 или 12346 в зависимости от того с какой тачки пришел запрос.
Я так понимаю, что нужно смотреть в сторону MARK и CONNMARK, но пока попытки их настроить успехом не увенчались.