LIMB
Вход Регистрация

тема

Чтобы не надо делать, чтобы случайно не подключить qEmu к openVpn на linux

cetttok · · 6 ответов · 256 просмотров

<strong>на новичков ориентировано</strong> :) xss fail

Я использую генто, но подойдет наверное любая unix система где есть нужные пакеты(а они скорее всего есть везде). Практически все команды требуют рута. Настройка и установка qEmu не входит в статью(сильно зависит от системы, а генто как я знаю не очень популярна). Предполагается что пользователь хотя запускает wm с установленной unix системой, но не имеет в ней подключения к сети. На wm стояла kali.

Часть 1. OpenVpn
В начале всего придется перейти на рута:
Bash:
doas su
(doas - аналог sudo для gentoo систем)
В моей прекрасной системе openVpn ставиться так:
Bash:
emerge -av openvpn
После установки мне пришлось создать файл /etc/openvpn/update-resolv-conf:
Bash:
#!/bin/bash
echo "nameserver 208.67.222.222" >> /etc/resolv.conf
echo "nameserver 208.67.220.220" >> /etc/resolv.conf

208.67.222.222 b 208.67.222.220 замените на предпочитаемые dns сервера. У меня тут opendns. При выключении openvpn запускается этот скрипт и меняет dns сервера.

Теперь надо получить конфиг для openvpn. Это уже полностью зависит от вашего vpn. Proton например бесплатно дает файл настройки(сертификаты и ip вырезаны, но этот конфиг использовался пр тесте):
Спойлер: тадам
client

dev tun

proto udp

дальше

remote <int.int.int.int int>

# ip адреса серверов



remote-random

resolv-retry infinite

nobind

cipher AES-256-GCM

setenv CLIENT_CERT 0

tun-mtu 1500

mssfix 0

persist-key

persist-tun

reneg-sec 0

remote-cert-tls server

auth-user-pass

script-security 2

up /etc/openvpn/update-resolv-conf

down /etc/openvpn/update-resolv-conf

дальше сертификаты

потом для запуска vpn:
Bash:
openvpn --config /path/to/config/config-name.ovpn

при запуске создается tun0 интерфейс и система автоматически перенаправляет всю сеть через vpn.

Часть 2. Подготовка tap интерфейса на хосте.
Все действия надо проводить уже с включенным opebVpn.
Первым делом создаем виртуальный tap интерфейс:
Bash:
ip tuntap add name tap0 mode tap
Потом присваиваем интерфейсу статический ip адрес и диапазон адресов в подсети (от 192.168.123.1 до 192.168.123.254). Нужно для того чтобы этот интерфейс стал хостом для подсети и все устройства из этой подсети могли общатся. 192.168.123.1 - можно заменить например на 192.168.110.1, но тогда меняйте и 192.168.123.2 (на 192.168.110.1) и так далее.
Bash:
ip addr add 192.168.123.1/24 dev tap0
Включаем виртуальный tap интерфейс:
Bash:
ip link set tap0 up

Для того чтобы передавать пакеты между сетевыми интерфейсами нужно изменить параметр ядра(сбрасывается при перезагрузке):
Bash:
sysctl -w net.ipv4.ip_forward=1
Еще нужны некоторые настройки фаервола(iptables).
Перед отправкой пакета в сеть (POSTROUTING) подменяем адрес хоста на адрес vpn сервера:
Bash:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Транспорт пакетов tap0->tun0 и обратный транспорт по установленным соединениям:
Bash:
iptables -A FORWARD -i tap0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT


Часть 3.1. Запуск qEmu для взаимодействия с нашим tap0 интерфейсом.
Моя команда запуска qemu:
Bash:
qemu-system-x86_64  --boot menu=on -drive file=/path/to/wm/disk.raw,format=raw -m memory-for-wm -cpu host -smp sockets=1,cores=cores,threads=threads-for-core --enable-kvm -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=net0

 
Bash:
--boot menu=on -drive file=/path/to/wm/disk.raw,format=raw -m memory-for-wm -cpu host -smp sockets=1,cores=cores,threads=threads-for-core --enable-kvm
 - мои параметры vm (/path/to/wm/disk.raw, memory-for-wm, cores, threads-for-core, надо заменить на свои). Это параметры wm. Они не относятся к сети, так что оставьте свои(желательно --enable-kvm добавить). С другой стороны из них нужно убрать все параметры сети. Вообщем гугл/джепете/а может даже собственные мозги вам в помощь
 
Bash:
-netdev tap,if=net0,ifname=tap,script=no,downscript=no
 - указывает что будем мост tap и он будет как первое основное интернет устройство, говорит что qemu не нужно ничего делать с интерфейсом при запуски машины и ее остановке(мы сами настроили tap0)
  
Bash:
-device virtio-net-pci,netdev=net0
 - подключает виртуальное pci интернет устройство с нашим (net0) названием (в госте eth0 будет)


Часть 3.2. Настройка в гостевой системе.
Тоже в рута там зайдите. Проверяем что наш интерфейс появился и называеться он eth0. Может быть немного другой, но сути не меняет. Просто используете имя вашего интерфейса.
Bash:
ip link show
Присвоим статический адрес нашей подсети интерфейсу и активируем его:
Bash:
ip addr add 192.168.123.2/24 dev eth0
ip link set eth0 up
Направляем весь сетевой трафик через шлюз - наш tap на хосте (кроме локального трафика локальный трафик):
Bash:
ip route add default via 192.168.123.1
Прописываем  dns в системе:   ```
Bash:
echo "nameserver 208.67.222.222
nameserver 208.67.220.220" | sudo tee /etc/resolv.conf
тут opendns используется.
теперь пингуем чего нибудь:
Bash:
ping gentoo.org
Профит!! то есть теперь мы знаем что нельзя делать, чтобы случайно не подключить qEmu к openVpn на linux

PS: ребят данная статья не оправдывает Proton, не говорит как обеспечить себе анонимность( установи себе генту). В данной статье рассмотрен способ что не надо делать чтобы просто не  (хаха) подключить к вашей qEmu vm внешнее vpn соединение, причем я думаю что схему можно (нужно улучшить). В этом методе наверное есть куча ошибок, так что если вы уверены, что я делаю что то не так - поправьте, буду вам благодарен. Скоро наверное напишу на тему создания qEmu машины.
Используйте генту
👍20 ❤️6 🤔4 😢4
Скрипт авто-настройки на хосте
Bash:
#!/bin/bash
if [ $(id -u) -eq  0 ];
then
        echo "Start openvpn-qEmu  config script.."
else
        echo "root needs"
        exit 1
fi


isTun=0
for net in /sys/class/net/*;
do
        if [ "$(basename "$net")" = "tun0" ];
        then
                isTun=1
                echo "tun0 detected!"
        fi
done
if [ $isTun  -eq 0 ];
then
echo "tun0 is not detect. openvpn works?"
exit 1
fi
if [ "$(ps -A |grep openvpn)" = "" ];
then
        echo "cant find openvpn procces"
        exit 1
else
        echo "open vpn works!"
fi
ip tuntap add name tap0 mode tap
ip addr add 192.168.123.1/24 dev tap0
ip link set tap0 up
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tap0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT
echo "great"
👍2
Скрипт авто настройки на клиенте
Bash:
#!/bin/bash
if [ $(id -u) -eq 0 ];
then
        echo "root granted. start script"
else
        echo "root needs"
        exit 1
fi
isTun=0
for net in /sys/class/net/*;
do
        if [ "$(basename "$net")" = "eth0" ];
        then
                isTun=1
                echo "eth0 detected!"
        fi
done
if [ $isTun -eq 0 ];
then
        echo "eth0 not detected! maybe change it in script to your net"
        exit 1
fi
ip addr add 192.168.123.2/24 dev eth0
ip link set eth0 up
ip route add default via 192.168.123.1
echo "nameserver 208.67.222.222
nameserver 208.67.220.220" | tee /etc/resolv.conf
👍1
В параметрах запуска ошибка. Правильные для этой схемы параметры - 
Bash:
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=net0
👍1
net.ipv4.ip_forward=1 добавь в файл /etc/sysctl.conf чтобв параметр ьыл на постоянке в системе
👍2
Ответlord_v0ldemort

net.ipv4.ip_forward=1 добавь в файл /etc/sysctl.conf чтобв параметр ьыл на постоянке в системе

нахера? Скрипт запускается под рутом все равно
👍2
Ответcetttok

Скрипт авто настройки на клиенте Bash: #!/bin/bash if [ $( id -u) -eq 0 ]; then echo "root granted. start script" else echo "root needs" exit 1 fi isTun=0 for net in /sys/class/net/*; do if [ " $(basename " $net " ) " =…

тут тоже ошибка просто вместо eth0 используете то что есть у вас в системе
👍5 🔥1

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.