Сценарий использования:
Клиент Shadowsocks ---> Сервер Shadowsocks (работает на VPS A) ---> Wireguard VPN (работает на VPS A) ---> Wireguard VPN (работает на VPS B)
По сути, я пытаюсь настроить зашифрованный прокси-сервер socks5, который выходит на VPS B, но по очевидным причинам не весь трафик должен проходить через VPN. Итак, на ум приходит политическая маршрутизация.
Текущее состояние:
Испытательная установка:
На VPS A:
3 сетевых интерфейса: ens3 (с публичным IP), lo (127.0.0.1), wg1 (10.88.88.2).
cgcreate -g net_cls:ss-server
echo 0x100001 > /sys/fs/cgroup/net_cls/ss-server/net_cls.classid
iptables -t mangle -N ss-server
iptables -t mangle -A ss-server -p tcp -m tcp --sport 8388 -j RETURN
iptables -t mangle -A ss-server -p udp -m udp --sport 8388 -j RETURN
iptables -t mangle -A ss-server -j MARK --set-mark 10
iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x100001 -j ss-server
iptables -t nat -A POSTROUTING -o wg1 -j MASQUERADE
echo "10 ss-server" >> /etc/iproute2/rt_tables
ip rule add fwmark 10 table ss-server
ip route add default via 10.88.88.2 table ss-server
cgexec -g net_cls:ss-server ss-server -c /etc/shadowsocks-libev/config.json -v -d 8.8.8.8
config.json:
{
"server":"0.0.0.0",
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"redacted",
"timeout":60,
"method":"chacha20-ietf-poly1305"
}
НА VPS B:
4 сетевых интерфейса: eth0 (общедоступный, но с частным IP-адресом хостинг-провайдера), lo (127.0.0.1), wg0 (10.7.3.1, в данном случае не используется), wg1 (10.88.88.1)
iptables -t nat -A POSTROUTING -s 10.88.88.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -s 10.88.88.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS --clamp-mss-to-pmtu
net.ipv4.ip_forward = 1 в /etc/sysctl.conf
Наблюдения:
root@vultr:~# iptables -vL -t mangle
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1810 1181K ss-server all -- any any anywhere anywhere cgroup 1048577
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain ss-server (1 references)
pkts bytes target prot opt in out source destination
48 1944 RETURN tcp -- any any anywhere anywhere tcp spt:8388
0 0 RETURN udp -- any any anywhere anywhere udp spt:8388
1762 1179K MARK all -- any any anywhere anywhere MARK set 0xa
root@vultr:~# iptables -vL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
7 513 MASQUERADE all -- any wg1 anywhere anywhere
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination