LINUX.ORG.RU
ФорумAdmin

Wireguard + Shadowsocks

 ,


1

1

Нужна помощь в правильной настройке связки 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

* ПРОБЛЕМЫ *

  1. Не определяется исходящая скорость клиента (от клиента в сеть) на speedtest.net. При этом входящая скорость максимально возможная (12 - 22 MB/s)
  2. 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)
  1. В консоли Shadowsocks множество сообщений вида:
INFO: [udp] remote_recv_recvfrom fragmentation, MTU at least be: 1602
INFO: [udp] remote_recv_sendto fragmentation, MTU at least be: 1547
Разработчики не придают этому значения.
  1. И как однозначно определить что Shadowsocks действительно накрывает канал Wireguard ?