поставить VPN на VPS и пустить через него трафик сервера Луникс
День добрый! Задача поставить статический ип (и обойти ограничения) на сервер с Убунту 20, для этого поднимаю ВПН на ВПС, настраиваю проксирование на основном сервере, но ип все равно отображается как динамический и трафик не идет через ВПН. Есть может какие то гайды почитать, разобраться? или подскажет кто-то что-то :)
Ответы (2 шт):
Не знаю всех деталей автора, но делать интерфейс VPN-подключения по умолчанию для исходящего трафика не стоит. Есть риск потерять удалённый доступ к серверу. А так это вполне реально.
Настройки сети сервера
Итак, представим, что сетевой интерфейс на нашем сервере имеет название eth0 (как его узнать - ifconfig), а адрес в локальной сети нашего сервера 10.0.1.10, шлюз - 10.0.1.1, пул адресов 10.0.1.2-10.0.1.254
Поднимаете свой VPN-сервер на арендованном VPS. Можно взять самый дешёвый VPS, а за основу использовать pptpd (хотя можно рассмотреть и более безопасные варианты)
Гайдов как поднять pptpd в интернете уйма, так что здесь это расписывать не буду
Настройка нашего pptpd на VPS
Для удобства на стороне pptp-сервера давайте сделаем адрес клиента (я так понимаю, он будет у вас всего один) в виртуальной сети 10.0.2.10, а адрес VPN-сервера (то есть шлюз) в виртуальной сети у нас будет 10.0.2.1
Создаём подключение к нашему VPN-серверу на стороне домашнего сервера
Идём в /etc/ppp/peers и там создаём файл подключения и назовём его myvpn. Пробуете подключиться pon myvpn. Видите интерфейс ppp0 в ifconfig? Значит подключились, проверяете ping 10.0.2.10. Если пинг есть, идёте дальше
Настройка iproute2 и netplan
То, что вы хотите провернуть, можно реализовать через таблицы маршрутизации. Идём в /etc/iproute2 и открываем rt_tables. Создадим в ней две таблицы. Первая для eth0, вторая для ppp0
801 801
800 800
Первое число - приоритет таблицы, второе - название. Сделаем и то, и другое одинаковыми. Должно получиться что-то вроде такого:
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
801 801
800 800
Сохраняем файл и теперь идём в /etc/netplan. Там должен быть файл конфигурации сетей. Я не знаю, как он у вас называется, но у меня он называется 01-netcfg.yaml.
По умолчанию там следующие настройки:
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
Обязательно сделайте бэкап настроек. Теперь рассмотрим пример настроек того, чего вы хотите:
network:
version: 2
ethernets:
ppp0: # задаём настройки интерфейсу vpn-подключения
addresses:
- 10.0.2.10/32 # зададим ему статический ip-адрес в виртуальной сети
gateway4: 10.0.2.1 # шлюз (ip-адрес vpn-сервера в виртуальной сети)
mtu: 1496 #
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
routes: # скажем, что весь исходящий трафик должен идти через 10.0.2.1
- to: 0.0.0.0/0
via: 10.0.2.1
metric: 50 # ... с метрикой 50
table: 800
routing-policy:
- from: 10.0.2.10
table: 800
priority: 100
eth0: # теперь основной интерфейс
addresses:
- 10.0.1.10/24 # также зададим ему статический айпишник в локальной сети
mtu: 1500
gateway4: 10.0.1.1 # адрес роутера/шлюза
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
routes: # скажем, что весь исходящий трафик должен идти через 10.0.1.1
- to: 0.0.0.0/0
via: 10.0.1.1
metric: 100 # но здесь ему зададим метрику выше, чем у ppp0, чтобы весь исходящий трафик по умолчанию шёл именно через eth0
table: 801
routing-policy:
- from: 10.0.1.10
table: 801
priority: 200
Вводим netplan apply, потом проверяем route -n. Результат должен получиться примерно таким:
root@myserver:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.1.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 10.0.2.1 0.0.0.0 UG 0 0 0 ppp0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.2.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
root@myserver:~#
Теперь попробуем по апишке проверить наши IP-адреса поинтерфейсно.
root@myserver:~# curl --interface eth0 https://api.myip.com
{"ip":"ваш.динамический.ip.адрес","country":"Russian Federation","cc":"RU"}root@myserver:~#
root@myserver:~# curl --interface ppp0 https://api.myip.com
{"ip":"публичный.адрес.vpn.сервера","country":"Russian Federation","cc":"RU"}root@myserver:~#
Если вы используете openVPN, то чтобы весь трафик шёл через него надо сделать следующее:
Или в серверном конфиге добавить пуш маршрута:
push "redirect-gateway def1"
Или в клиентском конфиге добавить этот маршрут:
redirect-gateway def1
Так же на стороне сервера надо разрешить этот трафик на фаерволе, настроив маскарадинг.
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Где сеть 10.8.0.0 это та из которой по умолчанию выдаются ip vpn клиентам, а eth0 это интерфейс, через который vps сервер смотрит в интернет (у вас может быть другой).