Джейден Чуа
7 сентября 2019 г. · чтение 12 мин.
Коллекция собранных воедино статей, которые я нашла в Интернете, которые позволили мне смотреть YouTube на ТВ через ChromeCast (я знаю, что в некоторых частях мира это звучит как надуманный пример).
Итак, я живу в место, где считается, что Интернет требует немного более нежного и любящего внимания, и, честно говоря, я Меня это совершенно устраивает. Я вижу в этом много преимуществ, и это дает возможность учиться и получать крошечные награды для любопытных людей, желающих исследовать возможность видеть дальше тщательно подобранного контента. Мне это нравится — иногда что-то вроде иш.
Предыстория — у меня уже есть работающий OpenVPN с клиентом и сервером Stunnel (вы также можете посетить мои предыдущие статьи о том, как я устанавливаю мой вверх), который уже удовлетворил большинство моих потребностей, и я очень счастлив. Но есть случаи, когда невозможно настроить какую-либо форму клиента OpenVPN + Stunnel, например ChromeCast или устройство iOS (поделитесь ссылкой, если вы когда-нибудь найдете работающий клиент stunnel или знаете, как его настроить).
Прежде чем продолжить, я просто хотел немного объяснить, что я собираюсь делать.
Идея состоит в том, чтобы иметь «шлюз по умолчанию» в сети, которая не Это не роутер. По сути, когда другие устройства подключаются к маршрутизатору, маршрутизатор будет транслировать, чтобы сообщить им, что существует другой интернет-шлюз. Это устройство шлюза принимает весь интернет-трафик и направляет его через VPN и, наконец, использует маршрутизатор в качестве собственного интернет-шлюза.
Обратной стороной этого подхода является то, что вам нужен маршрутизатор, позволяющий настраивать такой вариант DHCP. Не все роутеры делают. Поэтому перед тем, как начать, проверьте конфигурацию вашего маршрутизатора.
Преимущество здесь в том, что нам нужно только управлять маршрутизатором и только одним устройством шлюза.
Я уверен, что OpenWrt мог бы позволить вам сделать это в самом маршрутизаторе, но у меня не было достаточно времени, чтобы изучить его, поэтому я просто подключил другое устройство Ubuntu, которое будет выступать в качестве шлюза по умолчанию. Не стесняйтесь кричать, если вам удалось объединить все в маршрутизатор OpenWrt. Это значительно уменьшит беспорядок в оборудовании и накладные расходы на сеть.
Если вы думаете, что это совсем не то, что вам нужно. Остановитесь здесь.
- OpenVPN + Stunnel Server уже настроен
- Файлы OpenVPN + Stunnel Client готовы к настройке
- Ubuntu Устройство 18.04/16.04 (также может быть любое старое устройство или Raspberry Pi), далее мы будем называть его устройством шлюза.
- Маршрутизатор, который может устанавливать шлюз по умолчанию (я использовал маршрутизатор Xiaomi запущен OpenWrt или какой-либо другой маршрутизатор, у которого есть возможность настраивать шлюз по умолчанию)
Я пропущу часть настройки VPN-клиента. По сути, это то же самое, что подключить устройство Linux через OpenVPN и Stunnel.
Выполните шаги по настройке OpenVPN и клиента Stunnel в Ubuntu, а также убедитесь, что вы создали соответствующие клиентские ключи на сервер. Если вы не забыли посетить статью «Как настроить сервер OpenVPN + Stunnel». Если вы используете какую-либо другую форму дистрибутива Linux, следуйте инструкциям в соответствии с вашим дистрибутивом.
Прежде чем двигаться дальше, убедитесь, что ваш VPN работает должным образом.
В настоящее время , моя сетевая настройка выглядит следующим образом:
- Интернет-маршрутизатор:
192.168.1.1
- Маска подсети:
255.255.255.0
- Маршрутизатор, предоставляющий диапазон DHCP:
192.168.1.100~199
Примечание: на самом деле у меня есть еще один маршрутизатор, который находится поверх этого, но здесь это тривиально. Я просто подчеркиваю, что вполне возможно, что этот маршрутизатор будет подключаться к другому сетевому маршрутизатору.
Измените следующую часть настроек в соответствии с вашей собственной конфигурацией. Перед тем, как начать редактирование, убедитесь, что вы знаете имя интерфейса, к которому подключен ваш Ethernet. Вы можете проверить это, введя команду ifconfig
. Вы увидите примерно следующее. То, что вы ищете, — это часть enxxx. Например, в следующем примере имя интерфейса для подключения Ethernet — enp0s31f6
, будьте особенно осторожны, потому что, хотя обычно это en0, в некоторых случаях, как в этом конкретном случае, это другое имя.
С имя интерфейса известно, откройте и отредактируйте файл /etc/network/interfaces
.
auto enp0s31f6
allow-hotplug enp0s31f6
iface enp0s31f6 inet статический
адрес 192.168.1.2
маска сети 255.255.255.0
шлюз 192.168.1.1
dns-nameservers 1.1.1.1 8.8.8.8 8.8.4.4
Здесь, в файле конфигурации, действительно важны имена интерфейсов, не забудьте изменить их на свои собственные. enp0s31f6
на ваше собственное имя интерфейса, которое вы получили ранее!
Затем мы предоставляем этому сетевому интерфейсу статический IP-адрес. Если вы хотите настроить это с помощью Wi-Fi, см. Справочную ссылку, которую я предоставил в справочном разделе.
Включите переадресацию IP, это можно легко сделать, проверив / файл etc/sysctl.conf
. Найдите флаг net.ipv4.ip_forward
и убедитесь, что он установлен как 1
, или, если этот флаг не установлен заранее, просто добавьте его.
Это должно выглядеть так.
Если у вас есть маршрутизатор OpenWrt, мне было немного сложно заставить работать шлюз по умолчанию. Вам нужно перейти к «Сеть> Интерфейсы> LAN», прокрутить вниз до раздела DHCP-сервер и добавить 2 параметра DHCP.
3,192.168.1.2
6,192.168.1.2
Для этого нам нужно сначала создать файл службы stunnel. Создайте новый файл Содержимое файла выглядит следующим образом Затем просто включите и запустите службу с помощью Затем openvpn. Ну из коробки openvpn действительно имеет готовые конфигурации Итак, если вы посмотрите на В Затем нам нужно добавить в Наконец, нам нужно убедиться, что наш файл конфигурации клиента openvpn помещен в правильную папку, как определено в служебном файле systemd openvpn. Нам нужно разместить файл конфигурации, например, в Теперь мы включаем и запускаем службу следующим образом. Имейте в виду, что выделенная полужирным шрифтом часть должна совпадать с тем, как вы назвали файл conf клиента openvpn. В идеале я хотел бы иметь возможность перезагружать свой маршрутизатор и шлюз, чтобы все было запущено и работало без необходимости подключения SSH к устройству для включения stunnel сервис, клиент openvpn, подключение, бла-бла-бла… Я предполагаю, что у вас установлен и запущен супервизор, если нет, проверьте, как вы можете установить супервизор. Настроить Затем создайте небольшой сценарий оболочки, который будет запускать stunnel и openvpn последовательно . Я создаю новый сценарий оболочки После этого не забудьте изменить скрипт на исполняемый. Теперь нам нужно добавить новый файл конфигурации супервизора, чтобы супервизор выбирал файл конфигурации и запускался при запуске. Я создал /lib/systemd/system/stunnel.service
[ Модуль]
Описание = SSL-туннель для openvpn
After = network.target
After = syslog.target [Установить]
WantedBy = multi-user.target
Псевдоним = stunnel.target [Служба]
Тип = разветвление
ExecStart =/usr/bin/stunnel/etc/stunnel/stunnel. conf
ExecStop =/usr/bin/pkill stunnel
WorkingDirectory =/etc/stunnel
TimeoutSec = 600
Restart = always
PrivateTmp = false $ sudo systemctl enable stunnel $ sudo systemctl start stunnel
systemd
./lib/systemd/system/openvpn-client @ .service
вы должны увидеть файл конфигурации по умолчанию для openvpn. В этом файле мы просто сделаем небольшие изменения. Ниже они выделены жирным шрифтом.[Unit]> После
нам нужно добавить stunnel.target
, чтобы это сообщает systemd
, что openvpn зависит от stunnel. Если вы заметили, мы добавили это ранее в наш файл stunnel systemd.[Service]> TimeoutSec
и [Serivce]> Перезапустить
, чтобы служба была перезапущена в случае сбоя. [Unit]
Description = Туннель OpenVPN для% I
After = syslog.target network-online.target stunnel.target
Хочет = network-online.target
Documentation = man: openvpn (8)
Документация = https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Документация = https://community.openvpn.net/openvpn/wiki/HOWTO [Сервис]
Тип = notify
PrivateTmp = true
WorkingDirectory =/etc/openvpn/client
ExecStart =/usr/sbin/openvpn - suppress-timestamps - nobind - config% i.conf
CapabilityBoundingSet = CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
LimitNPROC = 10 DeviceAllow =/dev/rus > ProtectSystem = true
ProtectHome = true
KillMode = процесс
TimeoutSec = 100
Restart = always [Install]
WantedBy = multi-user.target /etc/openvpn/client/.
$ sudo systemctl enable openvpn-client @ my-router $ sudo systemctl start openvpn-client @ my-router
Примечание:
sudo systemctl disable openvpn-client @ my-router
.sudo systemctl stop openvpn-client @ my-router
команда.sudo systemctl status openvpn-client @ my-router
команда.2. Супервизор для управления OpenVPN и Stunnel при запуске
/etc/rc.local
и убедитесь, что supervisord запущен при запуске. У вас должна быть эта строка в файле. supervisord -c/etc/supervisord.conf
start-ovpn.sh
в папке /etc/openvpn/client
. Содержимое файлов выглядит следующим образом. #!/Bin/sh
stunnel && openvpn --config/etc/openvpn/client/ YOUR_OWN_CONFIG.ovpn $ sudo chmod + x/etc/openvpn/client/start -ovpn.sh
/etc/supervisor/conf.d/openvpn.conf
, его содержимое выглядит следующим образом. Эта конфигурация указывает супервизору запустить созданный ранее сценарий. Мы также перенаправляем любую ошибку в файл журнала /var/log/supervisor-ovpn.log
, чтобы мы могли проверить наличие ошибок, когда это произойдет. [ программа: openpvn]
command =/etc/openvpn/client/start-ovpn.sh
user = root
autostart = true
autorestart = true
stdout_logfile =/var/log/supervisor-ovpn.log
redirect_stderr=true
Я никогда не использовал эту функцию, но могу представить ее как полезную. По идее, при сбое VPN-соединения. Весь интернет-трафик также должен быть остановлен.
Не забудьте изменить выделенные жирным шрифтом части текста на свою собственную конфигурацию.
Отказ от ответственности: я никогда не использовал это, поэтому ваш пробег может отличаться.
$ sudo iptables -A OUTPUT -o tun0 -m comment --comment "vpn" -j ACCEPT $ sudo iptables -A OUTPUT -o enp0s31f6 -p icmp -m comment --comment "icmp" -j ACCEPT $ sudo iptables -A OUTPUT -d 192.168.1. 0 /24 -o enp0s31f6 -m comment --comment "lan" -j ACCEPT $ sudo iptables -A OUTPUT -o enp0s31f6 - p udp -m udp --dport 1198 -m comment --comment "openvpn" -j ACCEPT
$ sudo iptables -A OUTPUT -o enp0s31f6 -p tcp -m tcp --sport 22 -m comment --comment "ssh" -j ACCEPT
$ sudo iptables -A OUTPUT -o enp0s31f6 -p udp -m udp --dport 123 -m comment --comment "ntp" -j ACCEPT
$ sudo iptables -A OUTPUT - o enp0s31f6 -p udp -m udp --dport 53 -m comment --comment "dns" -j ACCEPT
$ sudo iptables -A ВЫХОД -o enp0s31f6 -p tcp -m tcp --dport 53 -m comment --comment "dns" -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -j DROP
Не забудьте сохранить эти настройки, чтобы они также применялись при перезагрузке.
sudo netfilter-persistent save