Wireguard + Shadowsocks
Нужна помощь в правильной настройке связки Wireguard/Shadowsocks для обфускации канала Wireguard. Клиент имеет прямое соединение с WG/SS-сервером (без роутера). По различным статьям интернетов удалось сделать следующее:
Установка сервисов сервера (Ubuntu 22)
$ wget https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
$ chmod +x wireguard-install.sh
$ ./wireguard-install.sh
$ apt install shadowsocks-libev
Конфиги сервера
- Wireguard - /etc/wireguard/wg0.conf
[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = <wg_port>
PrivateKey = WGGXx8...
PostUp = iptables -I INPUT -p udp --dport <wg_port> -j ACCEPT
PostUp = iptables -I FORWARD -i enp0s7 -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o enp0s7 -j MASQUERADE
PostUp = ip6tables -I FORWARD -i wg0 -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o enp0s7 -j MASQUERADE
PostDown = iptables -D INPUT -p udp --dport <wg_port> -j ACCEPT
PostDown = iptables -D FORWARD -i enp0s7 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o enp0s7 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i wg0 -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o enp0s7 -j MASQUERADE
### Client 1
[Peer]
PublicKey = PXEAaW...
PresharedKey = GYSqh4...
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
- Shadowsocks - /etc/shadowsocks-libev/config.json
{
"server": "0.0.0.0",
"server_port":<ss_port>,
"password":"<ss_password>",
"mode":"tcp_and_udp",
"method":"chacha20-ietf-poly1305",
"timeout":300
}
Запуск сервисов сервера
$ systemctl restart shadowsocks-libev.service
$ wg-quick up wg0
$ systemctl status wg-quick@wg0.service
$ systemctl status shadowsocks-libev.service
…………………………………………….
Установка клиента (Debian)
$ sudo apt install wireguard shadowsocks-libev
- Get build utilities (mk-build-deps) -
$ sudo apt install pkg-config gettext build-essential autoconf \
libtool libpcre3-dev asciidoc xmlto libev-dev libudns-dev \
automake libmbedtls-dev libsodium-dev git libc-ares-dev \
devscripts equivs
- Get Shadowsocks sources -
$ git clone --recurse-submodules https://github.com/shadowsocks/shadowsocks-libev.git
- Build Shadowsocks -
$ cd shadowsocks-libev
$ ./autogen.sh
$ dpkg-buildpackage -b -us -uc
- Install Shadowsocks -
$ sudo dpkg -i ../shadowsocks-libev*.deb
Конфиги клиента
- Wireguard - /etc/wireguard/wg0-client.conf
[Interface]
PrivateKey = gOfC03...
Address = 10.66.66.2/32,fd42:42:42::2/128
DNS = 1.1.1.1,1.0.0.1
[Peer]
PublicKey = JE0hSg...
PresharedKey = GYSqh4...
Endpoint = 127.0.0.1:1080
AllowedIPs = 0.0.0.0/0,::/0
- Shadowsocks - /etc/shadowsocks-libev/config.json
{
"server":"<ip_server>",
"server_port":<ss_port>,
"local_address": "0.0.0.0",
"local_port":1080,
"password":"<ss_password>",
"mode":"tcp_and_udp",
"method":"chacha20-ietf-poly1305",
"tunnel_address": "127.0.0.1:<wg_port>",
"timeout":300
}
Запуск клиента
$ sudo wg-quick up wg0-client
$ sudo ip route add <ip_server> via 192.168.8.1 dev eth0
$ sudo ss-tunnel -v -c /etc/shadowsocks-libev/config.json
... check Wireguard state
$ sudo wg
* FIXES *
... [FIX: wg-quick not found]
$ sudo apt install resolvconf
... [FIX: RTNETLINK answers: Permission denied]
# edit /etc/sysctl.conf :
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
$ sudo sysctl -p
* ПРОБЛЕМЫ *
- Не определяется исходящая скорость клиента (от клиента в сеть) на speedtest.net. При этом входящая скорость максимально возможная (12 - 22 MB/s)
- Wireshark у клиента на интерфейсе wg0-client, ловит кучу битых пакетов
... xx.xx.xx.xx 10.66.66.2 TCP 212 [TCP Spurious Retransmission] 443 → 34852 [ACK] Seq=2737 Ack=518 Win=28160 Len=160 TSval=165036359 TSecr=1700846827
... 10.66.66.2 xx.xx.xx.xx TCP 64 [TCP Dup ACK 223#2] 34852 → 443 [ACK] Seq=645 Ack=4246 Win=65536 Len=0 TSval=1700847089 TSecr=165035936 SLE=2737 SRE=2897
... xx.xx.xx.xx 10.66.66.2 TCP 52 [TCP Previous segment not captured] 443 → 34816 [FIN, ACK] Seq=4246 Ack=606 Win=28160 Len=0 TSval=165036378 TSecr=1700846830
... 10.66.66.2 xx.xx.xx.xx TCP 64 [TCP Dup ACK 338#1] 50268 → 443 [ACK] Seq=605 Ack=1 Win=65536 Len=0 TSval=1700848614 TSecr=165037871 SLE=4105 SRE=4247
... xx.xx.xx.xx 10.66.66.2 TCP 1420 [TCP Out-Of-Order] 443 → 50268 [ACK] Seq=1369 Ack=605 Win=28672 Len=1368 TSval=165037871 TSecr=1700848332 [TCP segment of a reassembled PDU]
... 10.66.66.2 xx.xx.xx.xx TCP 1500 [TCP Retransmission] 34838 → 443 [ACK] Seq=2001 Ack=4495 Win=65536 Len=1448 TSval=1700847448 TSecr=165036628
...
... fd42:42:42::1 fd42:42:42::2 ICMPv6 128 Destination Unreachable (no route to destination)
- В консоли Shadowsocks множество сообщений вида:
INFO: [udp] remote_recv_recvfrom fragmentation, MTU at least be: 1602
INFO: [udp] remote_recv_sendto fragmentation, MTU at least be: 1547
Разработчики не придают этому значения.
- И как однозначно определить что Shadowsocks действительно накрывает канал Wireguard ?