- VPN сервер за роутером
- Настраиваем роутер
- Устанавливаем VPN сервер
- Важно!
- Все готово
- А если все подключается, но ничего не работает
- Поднимаем VPN-туннель из мира домой в обход NAT
- Исходные данные
- Настройка туннеля
- Маршрутизация
- Источники
- Разблокируем интернет с помощью Mikrotik и VPN: подробный туториал
- 1. Устанавливаем VPN соединение
- 2. Добавляем правила в Mangle
- 3. Строим маршрут через VPN
VPN сервер за роутером
Давно хотелось иметь возможность попадать в свою домашнюю сеть из любой точки интернета. В большинстве случаев описанных в примерах роутер и VPN сервер являлись одной и тоже физической машиной, а в моем случае VPN сервер будет внутри сети за роутером и клиент, подключающийся по VPN должен будет попадать в мою сеть в том же диапазоне адресов что и локальные участники, чтоб максимально упростить совместную работу.
Все это мне удалось сделать из интернета от стрим, роутера D-link DSL-2640u/BRU/D и сервера на основе Ubuntu 9.10 и выглядит это примерно так:
Благо стим выдает реальные адреса при подключении и нет необходимости в подключении каких-либо услуг с его стороны за дополнительные деньги.
Настраиваем роутер
Для начала идем на роутер и настраиваем проброс VPN: Advanced Setup → NAT → Virtual Servers → Add. Выбираем PPTP в списке, вводим IP сервера и жмем «Save/Apply». Отдельно разрешать протокол GRE нигде не нужно. Потом сужаем диапазон адресов, выдаваемых по DHCP: Advanced Setup → LAN, там меняем End IP Address, я поставил себе 192.168.1.99 для того чтобы они не пересекались с выдаваемыми VPN сервером.
Мой роутер поддерживает Dynamc DNS, это очень удобно чтоб при подключении к VPN не вводить IP, который у стрима меняется каждые 24 часа, а вместо него удобное DNS имя. Идем в Advanced Setup → DNS → Dynamic DNS, жмем Add и вводим параметры.
Устанавливаем VPN сервер
Теперь переходим к серверу. Для начала нам понадобится сам VPN сервер (в linux он называется pptpd). Устанавливаем:
sudo apt-get install pptpd
Демон запущен и слушает порт tcp/1723, если на сервере используется firewall, то в нем нужно разрешить входящие соединения по протоколу GRE, а так же входящие соединения на tcp порт 1723:
$IPTABLES -A INPUT -p gre -s 0/0 -j ACCEPT
$IPTABLES -A OUTPUT -p gre -m state —state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 0/0 —dport 1723 j ACCEPT
Если все прошло успешно, переходим к настройке. Первым делом крутим /etc/pptpd.conf
#убеждаемся что закомментировано, чтоб клиенту вбрасывались адреса
#noipparam
# включим передачу VPN-клиентам широковещательных пакетов с внутреннего интерфейса
bcrelay eth0
#настроим IP сервера
localip 192.168.1.10
#и диапазон адресов для клиентов
remoteip 192.168.1.234-245
Теперь настраиваем /etc/ppp/pptpd-options
# Требовать от клиента обязательное аутентификации
auth
#требуем авторизации только через MS-CHAPv2
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
#включаем шифрование
require-mppe-128
#поскольку VPN-клиентам выделяются адреса из реальной Ethernet-сети
#то чтобы все видели друг друга
proxyarp
#мы не хотим становиться маршрутом по умолчанию
#но под виндой все равно потребуется настройка*
nodefaultroute
* не смотря на на nodefaultroute, под Windows при установке VPN все равно маршрут по-умолчанию вставал на VPN, чтобы этого не происходило идем в свойства VPN соединения → Сеть → Протокол TCP/IP → Свойства → Дополнительно, там снимаем галку «Использовать основной шлюз в удаленной сети».
Добавляем пользователей в /etc/ppp/chap-secrets
# client server secret IP addresses
user * password *
Здесь можно жестко задать IP для определенных пользователей.
Перезапускаем демона pptpd
sudo /etc/init.d/pptpd restart
Важно!
Теперь наш сервер будет работать роутером, поэтому для нормальной работы он должен уметь форвардить пакеты, иначе клиенты и локальные пользователи просто не увидят друг друга. Убеждаемся что
выдает 1 (0=disabled, 1=enabled). Если это не так, то нужно включить ip forwarding в ядре. Для этого открываем /etc/sysctl.conf находим и меняем
Все готово
Просим друзей создать VPN соединение к нашему серверу и проверить работоспособность, у меня все получилось с первого раза, чего и Вам желаю 🙂
А если все подключается, но ничего не работает
И роутер не DSL, а устанавливает VPN-соединение с провайдером для доступа в интернет, то вполне возможно нужно изменить размер MTU, таким образом, чтобы он был меньше MTU соединения с провайдером. Например, вы подключаетесь к провайдеру с MTU=1400 (см. в настройках роутера), тогда для своего VPN сервера нужно задать меньшее значение, например 1300. Для этого идем в /etc/ppp/pptpd-options и дописываем
При написании были использованы следующие материалы:
Поднимаем VPN-туннель из мира домой в обход NAT
.
Хочу рассказать вам про то как имея в интернете свой VPS-сервер можно поднять туннель в домашнюю сеть. И не платить при этом за статический IP провайдеру, и даже находясь за NAT, все равно сделать доступными в интернете свои домашние сервисы.
Исходные данные
- VPS сервер на debian со статическим реальным IP
- роутер с прошивкой OpenWRT, который находится за провайдерским NAT
- домашняя сеть с компьютерами и виртуальными машинами в 192.168.1.0/24
Настройка туннеля
apt-get update apt-get install openvpn
dev tun0 ifconfig 10.9.8.1 10.9.8.2 secret /etc/openvpn/static.key route 192.168.1.0 255.255.255.0
Здесь 10.9.8.x будет наша VPN-сеть, в которой адрес 10.9.8.1 мы назначем VPN-серверу, а адрес 10.9.8.2 VPN-клиенту.
Последняя строчка являет ссобой статисческий маршрут, который нужен для того, что бы наш VPS знал что путь в нашу домашнюю сеть лежит через роутер
Еще нам нужно сгенерировать ключ с которым будет подключаться к серверу наш роутер:
openvpn --genkey --secret static.key
Теперь установим OpenVPN на наш роутер с которого мы будем инициализировать VPN-соединение:
opkg update opkg install openvpn
scp root@your-server.org:/etc/openvpn/static.key /etc/openvpn/static.key
remote your-server.org dev tun0 ifconfig 10.9.8.2 10.9.8.1 secret /etc/openvpn/static.key keepalive 60 120
keepalive 60 180
Означает следующее: каждые 60 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета — то перезапускать туннель.
openvpn --config /etc/openvpn/tun0.conf
/etc/init.d/openvpn start /etc/init.d/openvpn enable
Маршрутизация
Теперь настроим маршрутизацию.
Что бы наш роутер пропускал наш сервер в домашнюю сеть, а машины из домашней сети пропускал к серверу, нужно добавить следующие правила на роутер.
Создадим файлик и запишем в него эти правила:
#!/bin/sh #Allow forwarding via tunnel iptables -I INPUT -i tun0 -j ACCEPT iptables -I FORWARD -i tun0 -j ACCEPT iptables -I OUTPUT -o tun0 -j ACCEPT iptables -I FORWARD -o tun0 -j ACCEPT
chmod +x /etc/iptables.up.rules
Добавлять нужно перед exit 0
В принципе все готово.
Наши сети соединены, все машины прекрасно друг-друга видят и обмениваются пакетами.
Теперь, при желании, можно настроить проброс портов с внешнего на внутренний адрес.
Вот так, к примеру, выглядит проброс ssh порта на одну из машин у меня в домашней сети:
# Forward SSH port to server iptables -t nat -A PREROUTING -d XX.XX.XX.XXX -p tcp --dport 666 -j DNAT --to-dest 192.168.1.200:22 iptables -t nat -A POSTROUTING -d 192.168.1.200 -p tcp --dport 22 -j SNAT --to-source 10.9.8.1
Где XX.XX.XX.XXX — внешний IP сервера, 192.168.1.200 — IP моей машины внутри домашней сети, 666 — порт при обращении к которому я попадаю на эту машину
PS: Если у вас что-то не получается убедитесь что на вашем VPS есть и подключены все необходимые для этого модули ядра
Источники
Разблокируем интернет с помощью Mikrotik и VPN: подробный туториал
В этом пошаговом руководстве я расскажу, как настроить Mikrotik, чтобы запрещённые сайты автоматом открывались через этот VPN и вы могли избежать танцев с бубнами: один раз настроил и все работает.
В качестве VPN я выбрал SoftEther: он настолько же прост в настройке как и RRAS и такой же быстрый. На стороне VPN сервера включил Secure NAT, других настроек не проводилось.
В качестве альтернативы рассматривал RRAS, но Mikrotik не умеет с ним работать. Соединение устанавливается, VPN работает, но поддерживать соединение без постоянных реконнектов и ошибок в логе Mikrotik не умеет.
Настройка производилась на примере RB3011UiAS-RM на прошивке версии 6.46.11.
Теперь по порядку, что и зачем.
1. Устанавливаем VPN соединение
В качестве VPN решения был выбран, конечно, SoftEther, L2TP с предварительным ключом. Такого уровня безопасности достаточно кому угодно, потому что ключ знает только роутер и его владелец.
Переходим в раздел interfaces. Сначала добавляем новый интерфейс, а потом вводим ip, логин, пароль и общий ключ в интерфейс. Жмем ок.
/interface l2tp-client
name=»LD8″ connect-to=45.134.254.112 user=»Administrator» password=»PASSWORD» profile=default-encryption use-ipsec=yes ipsec-secret=»vpn»
SoftEther заработает без изменения ipsec proposals и ipsec profiles, их настройку не рассматриваем, но скриншоты своих профилей, на всякий случай, автор оставил.
Для RRAS в IPsec Proposals достаточно изменить PFS Group на none.
Теперь нужно встать за NAT этого VPN сервера. Для этого нам нужно перейти в IP > Firewall > NAT.
Тут включаем masquerade для конкретного, или всех PPP интерфейсов. Роутер автора подключен сразу к трём VPN’ам, поэтому сделал так:
/ip firewall nat
chain=srcnat action=masquerade out-interface=all-ppp
2. Добавляем правила в Mangle
Первым делом хочется, конечно, защитить все самое ценное и беззащитное, а именно DNS и HTTP трафик. Начнем с HTTP.
Переходим в IP → Firewall → Mangle и создаем новое правило.
В правиле, Chain выбираем Prerouting.
Если перед роутером стоит Smart SFP или еще один роутер, и вы хотите к нему подключаться по веб интерфейсу, в поле Dst. Address нужно ввести его IP адрес или подсеть и поставить знак отрицания, чтобы не применять Mangle к адресу или к этой подсети. У автора стоит SFP GPON ONU в режиме бриджа, таким образом автор сохранил возможность подключения к его вебморде.
По умолчанию Mangle будет применять свое правило ко всем NAT State’ам, это сделает проброс порта по вашему белому IP невозможным, поэтому в Connection NAT State ставим галочку на dstnat и знак отрицания. Это позволит нам отправлять по сети исходящий трафик через VPN, но все еще прокидывать порты через свой белый IP.
Далее на вкладке Action выбираем mark routing, обзываем New Routing Mark так, чтобы было в дальнейшем нам понятно и едем дальше.
/ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark=HTTP passthrough=no connection-nat-state=!dstnat protocol=tcp dst-address=!192.168.1.1 dst-port=80
Теперь переходим к защите DNS. В данном случае нужно создать два правила. Одно для роутера, другое для устройств подключенных к роутеру.
Если вы пользуетесь встроенным в роутер DNS, что делает и автор, его нужно тоже защитить. Поэтому для первого правила, как и выше мы выбираем chain prerouting, для второго же нужно выбрать output.
Output это цепь которые использует сам роутер для запросов с помощью своего функционала. Тут все по аналогии с HTTP, протокол UDP, порт 53.
/ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark=DNS passthrough=no protocol=udp
add chain=output action=mark-routing new-routing-mark=DNS-Router passthrough=no protocol=udp dst-port=53
3. Строим маршрут через VPN
Переходим в IP → Routes и создаем новые маршруты.
Маршрут для маршрутизации HTTP по VPN. Указываем название наших VPN интерфейсов и выбираем Routing Mark.
На этом этапе вы уже почувствовали, как ваш оператор перестал встраивать рекламу в ваш HTTP трафик.
/ip route
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=HTTP distance=2 comment=HTTP
Ровно так же будут выглядеть правила для защиты DNS, просто выбираем нужную метку:
Тут вы ощутили, как ваши DNS запросы перестали прослушивать. То же самое командами:
/ip route
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=DNS distance=1 comment=DNS
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=DNS-Router distance=1 comment=DNS-Router
Ну под конец, разблокируем Rutracker. Вся подсеть принадлежит ему, поэтому указана подсеть.
Вот настолько было просто вернуть себе интернет. Команда:
/ip route
add dst-address=195.82.146.0/24 gateway=LD8 distance=1 comment=Rutracker.Org
Ровно этим же способом, что и с рутрекером вы можете прокладывать маршруты корпоративных ресурсов и других заблокированных сайтов.
Автор надеется, что вы оцените удобство захода на рутрекер и корпоративный портал в одно и тоже время не снимая свитер.