73

Сам себе vpn

Привет! На волне общей борьбы со здравым смыслом расскажу как настроить свой очень шустрый впн за минимальные деньги. это не будет 100500й гайд про openvpn или strongswan.

Речь пойдет про новомодное решение WireGuard

https://www.wireguard.com/

ребята вообще молодцы и используют крутую криптографию (Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF), еще очень круто что это все живет в кернеле и работает очень шустро на минимальных инстансах любых хостеров.

Вообще гайд как настроить(а там не сложно) есть на офсайте , но я поясню некоторые не совсем очевидные моменты, так что гайд не совсем для новичков

оригинал инструкции взят вот тут

https://www.ckn.io/blog/2017/11/14/wireguard-vpn-typical-set...


Из минусов - нормально работает на linux, и роутерах ddwrt(на каких-то чипах - не очень),  роутерах ubiquty/vyatta. на вин10 и макос работает в юзерленде, но стабильно. на устройствах андроид -скорее не работает.

Итак по настройке

Предположу, что виртуальную мащину у хостера вы уже купили (aruba, scaleway, digitalocean, aws - да тысячи их) и там стоит что-то из семейства debian

1. ставим по инструкции отсюда https://www.wireguard.com/install/ там под разные дистры, так что все более менее понятно, на клиент и на сервер


2. генерим по 2 ключа на клиент и сервер

####

Umask 077

wg genkey | tee server_private_key | wg pubkey > server_public_key

wg genkey | tee client_private_key | wg pubkey > client_public_key

####


3. делаем конфиг сервера /etc/wireguard/wg0.conf

####

[Interface]

Address = 10.200.200.1/24

SaveConfig = true

PrivateKey = <insert server_private_key>

ListenPort = 51820

[Peer]

PublicKey = <insert client_public_key>

AllowedIPs = 10.200.200.2/32

####

Моменты такие wg0 -будет название интерфейса, ключи какие куда-тоже понятно, вставлять, похоже, что сам ключ а не путь до файла.AllowedIPs - виртальный адрес клиента


4. делаем конфиг клиента /etc/wireguard/wg0-client.conf

####

[Interface]

Address = 10.200.200.2/32

PrivateKey = <insert client_private_key>

DNS = 10.200.200.1

[Peer]

PublicKey = <insert server_public_key>

Endpoint = <insert vpn_server_address>:51820

AllowedIPs = 0.0.0.0/0

PersistentKeepalive = 21

####

тут allowedips = 0.0.0.0/0 -завернет весь траффик клиента в тунель, dns - это на сервере стоит unbound dns для пущей секурности. endpoint - внешний адрес сервера


5. поднимаем интерфейс на сервере

####

chown -v root:root /etc/wireguard/wg0.conf

chmod -v 600 /etc/wireguard/wg0.conf

wg-quick up wg0

systemctl enable wg-quick@wg0.service

####


6.включаем ротуинг на сервере в /etc/sysctl.conf добавляем  net.ipv4.ip_forward=1

и что бы не перезагружать

####

sysctl -p

echo 1 > /proc/sys/net/ipv4/ip_forward

####


7.пилим iptables на сервере

####

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp -m udp --dport 51820 -m conntrack --ctstate NEW -j ACCEPT

iptables -A INPUT -s 10.200.200.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT

iptables -A INPUT -s 10.200.200.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT

iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NEW -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o eth0 -j MASQUERADE

######

в последней строчке eth0 - название вашего сетевого интерфейса на сервере

настроим сохранение правил

####

apt-get install iptables-persistent

systemctl enable netfilter-persistent

netfilter-persistent save

####


8. стаивим unbound для dns на сервер


####

apt-get install unbound unbound-host curl

curl -o /var/lib/unbound/root.hints https://www.internic.net/domain/named.cache

####


конфиг днс сервера такой /etc/unbound/unbound.conf

#####

server:

num-threads: 4

#Enable logs

verbosity: 1

#list of Root DNS Server

root-hints: "/var/lib/unbound/root.hints"

#Use the root servers key for DNSSEC

auto-trust-anchor-file: "/var/lib/unbound/root.key"

#Respond to DNS requests on all interfaces

interface: 0.0.0.0

max-udp-size: 3072

#Authorized IPs to access the DNS Server

access-control: 0.0.0.0/0 refuse

access-control: 127.0.0.1 allow

access-control: 10.200.200.0/24 allow

#not allowed to be returned for public internet names

private-address: 10.200.200.0/24

# Hide DNS Server info

hide-identity: yes

hide-version: yes

#Limit DNS Fraud and use DNSSEC

harden-glue: yes

harden-dnssec-stripped: yes

harden-referral-path: yes

#Add an unwanted reply threshold to clean the cache and avoid when possible a DNS Poisoning

unwanted-reply-threshold: 10000000

#Have the validator print validation failures to the log.

val-log-level: 1

#Minimum lifetime of cache entries in seconds

cache-min-ttl: 1800

#Maximum lifetime of cached entries

cache-max-ttl: 14400

prefetch: yes

prefetch-key: yes

####


запускаем днс

####

chown -R unbound:unbound /var/lib/unbound

systemctl enable unbound

####


можно проверить как работает днс таким образом

####

nslookup www.google.com. 10.200.200.1

####


9. поднимаем интерфейс клиента

####

sudo wg-quick up wg0-client

####

проверить моджно командой sudo wg show

должно выдать что то типа

interface: wg0-client

public key: FwdTNMXqL46jNhZwkkzWsyR1AIlGX66vRWe1HFSemHw=

private key: (hidden)

listening port: 39451

fwmark: 0xca6c

peer: +lb7/6Nn8uhlA/6fjT3ivfM5fWKKQ2L+stX+dSq18CI=

endpoint: 165.227.120.177:51820

allowed ips: 0.0.0.0/0

latest handshake: 49 seconds ago

transfer: 11.41 MiB received, 862.25 KiB sent

persistent keepalive: every 21 seconds


10. Фух, вроде все! проверяем изменился или нет наш ип адрес например вот тут

https://whoer.net/ а днс можно проверить вот здесь http://dnsleak.com/. остановить интерфейс можно вот так

####

sudo wg-quick down wg0-client

####


По тестам - мой провайдер дает 250мбит, оно успешно было завернуто в WG,т.е. все 250 мбит пролезли, инстанс -2core, 1Gb ram, при тесте нагрузка составила 10% от CPU. на такой же машине openvpn смог 80мбит, ipsec/l2tp -130мбит.

Всем спасибо, удачи!

GNU/Linux

1.2K поста15.6K подписчика

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.