Привет! На волне общей борьбы со здравым смыслом расскажу как настроить свой очень шустрый впн за минимальные деньги. это не будет 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мбит.
Всем спасибо, удачи!