Сам себе vpn
Речь пойдет про новомодное решение WireGuard
ребята вообще молодцы и используют крутую криптографию (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 подписчика
Правила сообщества
Все дистрибутивы хороши.
Будьте людьми.