Найти тему

Изменение ttl ipv4, ipv6. Отключение ipv6 Ubuntu

ВСЕ СКРИПТЫ В ДАННОМ ОПУСЕ ДОЛЖНЫ БЫТЬ ИСПОЛНЯЕМЫМИ!!! СКРИПТ ДЛЯ 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

Вроде все. СПС за внимание!