ВСЕ СКРИПТЫ В ДАННОМ ОПУСЕ ДОЛЖНЫ БЫТЬ ИСПОЛНЯЕМЫМИ!!! СКРИПТ ДЛЯ NETWORKMANAGER ДОЛЖЕН ПРИНАДЛЕЖАТЬ ROOT, ИНАЧЕ ОН НЕ БУДЕТ ОБРАБАТЫВАТЬСЯ!
Небольшой гайдик. Сам в свое время искал решение по сабжевому вопросу. Может и пригодится кому.
После последнего обновления ubuntu 22.04 сетевой интерфейс с en01 поменялся на довольно странное enxb2fcb03cd476. Будьте внимательны. Я пока этим вопросом не заморачивался.
Начнем со скриптов. М-да, и как тут форматирование делается? )
Для начала, при загрузке системы, нам нужно поменять ttl ipv4. Да, тут еще такой нюанс. После перезагрузки телефона или компа при выставленном ttl в 64 может не происходить соединение с инетом. Поэтому выставляем ttl в 65, загружаем какую-нибудь страничку, а потом опять меняем ttl на 64.
Все скрипты у меня валяются в ~/.local/bin. Рекомендую и вам использовать этот путь. Только добавьте этот путь в ваш $PATH. Лучше это сделать в ~/.profile. Потом если вы смените оболочку на что-нибудь другое (zsh, fish) не возникнет надобности править файл ~/.bashrc, ~/.zsh и т.д.
Начнем.
Первый файлик change-ttl.sh. Собственно он отвечает за подмену ttl.
#!/usr/bin/env bash
echo -e 'your_pass' | sudo -S sysctl "net.ipv4.ip_default_ttl=$1"
your_pass - ваш пароль к root. Это чтобы не вводить пароль вручную. Для пользователей системы с одним юзером - это норм. Хотя сейчас начнется - это не unix-way и т.д. Наплюйте.
$1 - параметры к скрипту. Мы можем задавать значения ttl.
Меняем его на исполняемый: chmod +x название_скрипта.
Теперь мы можем его вызвать change-ttl.sh 65 или 125. 64. Где циферки - это ttl.
sysctl-info.sh - с помощью данного скрипта, мы сможем посмотреть нужную нам инфу.
#!/usr/bin/env bash
echo
echo "IPV6"
echo
sysctl -ar "disable_ipv6"
echo
echo 'HOP_LIMIT'
echo
sysctl -ar '\.hop_limit'
echo
echo 'TTL'
echo
sysctl -ar "ip_default_ttl"
echo
Здесь мы увидим настройки ipv4,ipv6. ttl ipv6, ttl ipv4.Примерный вывод:
IPV6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.eno1.disable_ipv6 = 1
net.ipv6.conf.enxb2fcb03cd476.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.wlo1.disable_ipv6 = 1
HOP_LIMIT
net.ipv6.conf.all.hop_limit = 65
net.ipv6.conf.default.hop_limit = 65
net.ipv6.conf.eno1.hop_limit = 64
net.ipv6.conf.enxb2fcb03cd476.hop_limit = 65
net.ipv6.conf.lo.hop_limit = 64
net.ipv6.conf.wlo1.hop_limit = 65
TTL
net.ipv4.ip_default_ttl = 65
Где 1 (единица) значит опция отключена. Не волнуйтесь, по-поводу того, что не некоторых интерфейсах не изменились значения. Просто когда произойдет подключения к ним, они изменятся автоматом.
change-sysctl.sh - отключаем ipv6.
#!/usr/bin/env bash
# меняем ipv6
echo 'your_pass' | sudo -S sysctl -ar 'disable_ipv6' \
| sed -nre 's/(.+) = 0/\1=1/gp' \
| xargs -I % sh -cv 'echo "your_pass" | sudo -S sysctl -w %'
Раньше этого вполне себе хватало. Но сейчас после обновления... что-то стало недостаточно. Пришлось задействовать nmcli - консольный клиент NetworkManager. В ubuntu стоит по-умолчанию.
NetworkManager у меня отвечает за контроль за подключениями к сети. В частности отключает протокол ipv6, по которому нас могут мониторить. NetworkManager обрабатывает определенные события, которые происходят с сетевыми интерфейсами. Допустим на старом компе у меня отвалился wifi, то у меня сразу же отключалось подключение через usb к телефону. Примерно так. Просмотреть свои подключения и интерфейсы можно так:
nmcli conn show
NAME UUID TYPE DEVICE
Проводное соединение 7 106157a9-bdc3-3351-b5ab-d20deb58df37 ethernet enxb2fcb03cd476
Hotspot 2bce35bb-c5a1-4a91-941c-9d4665cfde08 wifi --
Netherlands_freeopenvpn_udp 54a87a9f-cf26-419e-9e1c-dec25cc48f73 vpn --
Redmi 9C NFC fa10178f-a3e7-49b2-8973-6530de6c2415 wifi --
Проводное соединение 1 ed6e068b-b026-342a-95d5-c0dffdf138d6 ethernet --
Проводное соединение 12 9d9c3740-16d0-3a29-ad09-a607fb4505a6 ethernet --
Проводное соединение 2 bf3cfb68-fb17-336a-962e-b5a25b3b7fc6 ethernet --
Проводное соединение 3 8dd36df7-178d-392f-a326-881ae417d4a6 ethernet --
Проводное соединение 4 d6df7b7e-65ee-3690-acf3-5abd392adf8a ethernet --
Проводное соединение 5 e7d40619-da9c-39ac-8773-7a2ff91e8546 ethernet --
Проводное соединение 6 be9c49f8-480b-39b6-8846-ef6ef4c6a79b ethernet --
Для парсинга соединения лучше использовать ID соединения. Я несколько часов убил пытаясь использовать соединение по названию. )
Скрипт расположить в /etc/NetworkManager/dispatcher.d/99-change-ipv6. Название скрипта без всяких расширений!!! Цифры в название скрипта - это просто в каком порядке он будет запускаться.
ВСЕ СКРИПТЫ В ДАННОМ ОПУСЕ ДОЛЖНЫ БЫТЬ ИСПОЛНЯЕМЫМИ!!! СКРИПТ ДЛЯ NETWORKMANAGER ДОЛЖЕН ПРИНАДЛЕЖАТЬ ROOT, ИНАЧЕ ОН НЕ БУДЕТ ОБРАБАТЫВАТЬСЯ!
#!/bin/bash
#
#
if [[ "$2" == "up" ]]; then
/full/path/your/home/.local/bin/change-sysctl.sh
/full/path/your/home/.local/bin/change-ttl.sh 65
RES=$(nmcli conn show --active | awk -F ' ' '!/NAME/ {print $2}')
nmcli connection modify "$RES" ipv6.method disable
fi
Вроде все. СПС за внимание!