Basado en
https://www.oilandfish.com/posts/wireguard-shadowsocks.html y en https://encomhat.com/2021/07/obfuscate-wireguard/
Y con la ayuda de manuocho de https://www.tierradehackers.com/
Vamos a partir de que para obtener más privacidad, hemos contratado un
VPS (clouding.io por
ejemplo) y sobre el mismo hemos desplegado nuestra propia VPN, concretamente
Wireguard. Los
dispositivos del hogar los hemos configurado para acceder a Internet a través
de nuestra VPN, y todo ha ido bien hasta que en muchas conexiones públicas se
ha puesto de moda
filtrar precisamente las conexiones VPN.
El objetivo principal, por tanto, es conseguir que nuestra conexión VPN no
deje de funcionar cuando conectamos alguno de nuestros dispositivos a una red
WiFi o de otro tipo que filtre el tráfico e impida nuestra conexión VPN.
Shadowsocks
El primer paso es saltar ese tipo de filtros o firewalls, y lo vamos a hacer con Shadowsocks. Para ello hay que instalar y configurar Shadowsocks tanto en nuestro VPS, que consideraremos como servidor, como en nuestros dispositivos que consideraremos clientes.
Hay que entender también, que una vez tengamos en marcha Shadowsocks, su función viene a ser la misma que la de un proxy socks5. Por tanto para sacar partido del mismo las aplicaciones se deberán configurar para que usen ese tipo de conexión.
Aunque, si lo combinamos con Wireguard, no tendremos que configurar las
aplicaciones una a una, sino que todo el tráfico quedará ofuscado (doblemente,
una por el proxy y otra por la VPN).
En el lado de la VPS (123.123.123.123)
Supondremos que la IP pública de tu VPS es 123.123.123.123, que aunque ahora
mismo no lo necesitamos, luego sí que lo emplearemos.
Como no soy un gran informático me gusta usar docker-compose pues configura
todo de forma casi automática, tan sólo a través de las recetas que se
escriben en el archivo
docker-compose.yaml
version: '3.3'
services:
wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
- SERVERURL= #optional
- SERVERPORT=51820 #optional
- PEERS=7 #optional
- PEERDNS=1.1.1.1,1.0.0.1 #optional
- INTERNAL_SUBNET=10.11.11.0 #optional
volumes:
- ~/wireguard:/config
- /lib/modules:/lib/modules
- /usr/src:/usr/src
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
shadowsocks:
image: shadowsocks/shadowsocks-libev
container_name: shadowsocks
restart: always
ports:
- "443:8388"
environment:
- METHOD=chacha20-ietf-poly1305
- PASSWORD=tucontraseña
Una vez modificado el archivo de con "la receta" de Shadowsocks, lo podemos poner en marcha con el comando:
docker-compose up -d
Por si no te has fijado, el puerto de acceso desde el exterior lo he puesto en 443 (https) aunque se puede poner otro puerto, pero lo importante es que en el firewall de tu VPS (o lo que tú estés usando) le des acceso TCP.
En el lado de tu dispositivo (127.0.0.1)
En mi caso voy a considerar que mi dispositivo es un portátil con Ubuntu, y en este caso el comando para instalar será:
sudo apt install shadowsocks-libev
Su archivo de configuración se encuentra en /etc/shadowsocks-libev/config.json, que en principio se configura como si se fuera a comportar como servidor, así que lo vamos a modificar para que se comporte como del lado "cliente".
{
"server": "123.123.123.123",
"server_port": 443,
"mode": "tcp_and_udp",
"local_address": "0.0.0.0",
"local_port": 1080,
"tunnel_address": "127.0.0.1:51820",
"password": "tucontraseña",
"timeout": 300,
"method": "chacha20-ietf-poly1305"
}
(Si sólo deseamos un funcionamiento como de proxy socks la línea que hace referencia a "tunnel_address" no hace falta)
Editamos el archivo de systemd correspondiente
/usr/lib/systemd/system/shadowsocks-libev.service
cambiando el binario de ss-server a ss-tunnel
(o a ss-local si lo quieres dejar sólo como proxy socks):
ExecStart=/usr/bin/ss-tunnel -c $CONFFILE $DAEMON_ARGS
Tras ello recargamos systemd:
sudo systemctl daemon-reload
Y luego reiniciamos Shadowsocks: sudo systemctl restart shadowsocks-libev
(Con eso, ya podemos configurar el proxy en el navegador, e incluso para
ssh lo haríamos con un comando tipo:
ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' user@123.123.123.123
Lo cual está muy bien y casi sustituye la VPN.)
Wireguard
Nota: Por lo visto en alguna actualización se perdió el soporte y de momento parece que no se puede redirigir :(
En este punto lo único que queda pendiente es hacer un pequeño cambio en la configuración local del archivo peer correspondiente a nuestro dispositivo. Éste archivo se encuentra en /etc/wireguard/ y si lo hemos generado con Docker puede tener como nombre peer1.conf mientras que si lo hemos generado de manera más convencional se suele llamar wg0.conf
En cualquier caso Deberemos modificar el Endpoint y apuntarlo a nuestro proxy:
[Interface]
Address = 10.11.11.2
PrivateKey = QNm74T19NV480307XBQQ+2unC+k0jRJ+TSrc+H0ck28=
ListenPort = 51820
DNS = 1.1.1.1,1.0.0.1
[Peer]
PublicKey = qa4I9R9xTwlNUFIdiSUTM1SEriQeJLnsPfbNN64BUTs=
Endpoint = 127.0.0.1:1080
AllowedIPs = 0.0.0.0/0, ::/0
Y ya se podría poner a funcionar con el comando siguiente en caso de que
nuestro archivo de configuración se llame peer1.conf
sudo systemctl start wg-quick@peer1
Si después lo que queremos es que al arrancar el sistema directamente se ponga en marcha la VPN, entonces:
sudo systemctl enable wg-quick@peer1
Y nada más, con ello debería estar todo redireccionado y bien redireccionado.
Ahora podría ser interesante el configurar en el VPS un proxy inverso tipo Traefik o Nginx porque hemos usado como puerto 443 y si queremos poner en el VPS alguna web https nos podría dar problemas.
SSH
Se puede emplear ssh para canalizar nuestra conexión, hay información detallada en el siguiente enlace: