Как следует из ранее изложенного, ничего сверхъестественного не обнаружилось, и для того, чтобы воспользоваться этим VPN, требовательный к железу Debian 9 x64 не нужен совершенно. Bitmask тоже не нужен. Проблемы могут возникнуть разве что с виндой, а вот с линуксов вполне можно раздавать VPN-интернет на другие устройства в локальной сети, в т.ч. и на виндовые компьютеры. Без bitmask это даже лучше получается, поскольку он пакостит в iptables. Пакостит, правда, для «более лучшей» защиты пользователя. Но в данном случае получается, как у Черномырдина — хотели как лучше, получилось как всегда.
Первым делом надо составить конфиг для Openvpn. Не буду каждый параметр пояснять, а ссылка на сами конфиги есть в конце заметки. Вроде составил правильно, по ранее извлеченным параметрам Openvpn. Единственное что добавил от себя, это запуск пользовательских скриптов — параметры script-security 2
, разрешающий оный запуск, и параметры up '/путь/к/скрипту up'
и down '/путь/к/скрипту down'
, указывающие Openvpn, какой скрипт надо запускать при, соответственно, установке и разрыве соединения.
Про подобные скрипты я совсем недавно упоминал.
Переделывался из ранее приведенного примера с небольшими изменениями:
#!/bin/bash #заводим человеческие переменные MAIN_STAT=$1 #up/down DEV_NAME=$2 TUN_MTU=$3 LINK_MTU=$4 LOCAL_IP=$5 REMOTE_IP=$6 ADD_STAT=$7 #init/restart #путь к ip и iptables ACPATH="/usr/sbin/" # [...] #соединение поднялось if [ "$MAIN_STAT" = "up" ]; then #установка маршрута по умолчанию "$ACPATH"ip route del default #удаление старого #установка нового #именно так, локальный ip и удаленный - один и тот же #особенность провайдера Oo "$ACPATH"ip route add default via $LOCAL_IP dev $DEV_NAME src $LOCAL_IP #разрешение транзитного трафика "$ACPATH"iptables -P FORWARD ACCEPT #установка адреса DNS-сервера echo "nameserver 10.42.0.1">/etc/resolv.conf exit fi #соединение разорвано if [ "$MAIN_STAT" = "down" ]; then #запрет транзитного трафика "$ACPATH"iptables -P FORWARD DROP #установка маршрута по умолчанию без VPN "$ACPATH"ip route del default "$ACPATH"ip route add default via 10.10.1.1 dev eth1 src 10.10.20.55 #восстанавление адресов DNS по умолчанию echo "nameserver 8.8.8.8">/etc/resolv.conf echo "nameserver 8.8.4.4">>/etc/resolv.conf fi
Основная особенность в том, что сервер, вместо REMOTE_IP
, передает маску подсети, а чтобы маршрутизация осуществлялась правильно, вместо удаленного IP надо прописать выданный сервером локальный.
Долго с этим разбирался, т.к. поначалу был глюк — транзитный трафик проходил, а вот локальный нет. Помог выхлоп ifconfig
:
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.42.0.2 netmask 255.255.248.0 destination 10.42.0.2
inet6 2001:db8:123::1000 prefixlen 64 scopeid 0x0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 982346 bytes 1307345786 (1.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 541554 bytes 27027659 (25.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Вторая важная особенность — надо прописать правильный DNS.
И не забыть передать его клиентам, если компьютер используется в качестве PPTP- или другого VPN-сервера.
ЗЫ. Если будете пользоваться сервисом riseup.net, по возможности донатьте, хорошее дело ребята делают. Фиг где в мире встретишь таких альтруистов.
Предыдущие части заметки
Часть 1. копия
Часть 2. копия
Скачать все в PDF
На PasteBin:
Голландия
Канада
США
http://riseup.net
Регистрация Riseup Black
О Riseup
Донат