Содержание

Смена IP-адреса в Yggdrasil при старте сервиса

Захотелось внести в Yggdrasil немножко анонимности. Если у вас на ПК нет никаких сервисов, привязанных к IP-адресу то его смена при каждой загрузке может не помешать.

Пример будет приведен для сервиса yggdrasil который управляется через systemctl.

Скрипт

Сам скрипт очень прост.

sed -i "s/$(cat \/etc\/yggdrasil.conf | grep 'PrivateKey')/$(yggdrasil -genconf | grep 'PrivateKey')/" /etc/yggdrasil.conf

Разберем этот скрипт.

Ищем строку с приватным ключом:

cat \/etc\/yggdrasil.conf | grep 'PrivateKey'

Генерируем новый конфиг с новым приватным ключом и грепаем строку с ключом:

yggdrasil -genconf | grep 'PrivateKey'

Далее подставляем результаты в sed.

systemctl

Теперь нам нужно поместить этот скрпит в файл сервиса yggdrasil.

Отредактируем файл сервиса yggdrasil:

systemctl edit yggdrasil.service

У вас в редакторе откроется подобный текст:

### Editing /etc/systemd/system/yggdrasil.service.d/override.conf
### Anything between here and the comment below will become the contents of the drop-in file


### Edits below this comment will be discarded
...

Добавьте наш override:

### Editing /etc/systemd/system/yggdrasil.service.d/override.conf
### Anything between here and the comment below will become the contents of the drop-in file

[Service]
ExecStartPre=/bin/bash -c '''sed -i "s/$(cat \/etc\/yggdrasil.conf | grep 'PrivateKey')/$(yggdrasil -genconf | grep 'PrivateKey')/" /etc/yggdrasil.conf'''

### Edits below this comment will be discarded

Сохраните изменения и выполните команду для обновления файлов конфигураций:

systemctl daemon-reload

Проверка

Теперь проверим, что наш override для файла сервиса применился. Выполним команду:

systemctl show --no-pager yggdrasil.service | grep -i 'ExecStartPre='

В выводе будет определение нашей команды, которая записана через override, и основной команды, которая была по умолчанию.

ExecStartPre={ path=/sbin/modprobe ; argv[]=/sbin/modprobe tun ; ignore_errors=yes ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
ExecStartPre={ path=/bin/bash ; argv[]=/bin/bash -c sed -i "s/$(cat \/etc\/yggdrasil.conf | grep PrivateKey)/$(yggdrasil -genconf | grep PrivateKey)/" /etc/yggdrasil.conf ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }

Теперь проверим, что IP-адрес меняется, посмотрим наш текущий адрес:

ip -br a | grep tun0
tun0             UNKNOWN        202:f108:1d85:56cb:5ed1:5edc:7a5:df05/7

Перезапустим сервис:

systemctl restart yggdrasil.service

Проверим еще раз наш IP-адрес:

ip -br a | grep tun0
tun0             UNKNOWN        200:babe:dada:ffff:5ed1:5edc:7a5:ffff/7

Адрес изменился.