Для доступу до ізольованої мережі я використовую проксі-сервер ssh -D
socks .
Щоб уникнути необхідності вводити деталі кожного разу, коли я додавав їх до ~/.ssh/config
:
$ awk '/Host socks-proxy/' RS= ~/.ssh/config
Host socks-proxy
Hostname pcit
BatchMode yes
RequestTTY no
Compression yes
DynamicForward localhost:9118
Потім я створив файл визначення модуля обслуговування системного користувача :
$ cat ~/.config/systemd/user/SocksProxy.service
[Unit]
Description=SocksProxy Over Bridge Host
[Service]
ExecStart=/usr/bin/ssh -Nk socks-proxy
[Install]
WantedBy=default.target
Я дозволив демону перезавантажити нові визначення служби, увімкнув нову службу, запустив її, перевірив її стан і перевірив, чи слухає він:
$ systemctl --user daemon-reload
$ systemctl --user list-unit-files | grep SocksP
SocksProxy.service disabled
$ systemctl --user enable SocksProxy.service
Created symlink from ~/.config/systemd/user/default.target.wants/SocksProxy.service to ~/.config/systemd/user/SocksProxy.service.
$ systemctl --user start SocksProxy.service
$ systemctl --user status SocksProxy.service
● SocksProxy.service - SocksProxy Over Bridge Host
Loaded: loaded (/home/alex/.config/systemd/user/SocksProxy.service; enabled)
Active: active (running) since Thu 2017-08-03 10:45:29 CEST; 2s ago
Main PID: 26490 (ssh)
CGroup: /user.slice/user-1000.slice/user@1000.service/SocksProxy.service
└─26490 /usr/bin/ssh -Nk socks-proxy
$ netstat -tnlp | grep 118
tcp 0 0 127.0.0.1:9118 0.0.0.0:* LISTEN
tcp6 0 0 ::1:9118 :::* LISTEN
Це працює за призначенням. Тоді я хотів би уникнути необхідності вручну запустити службу або запустити його на постійній основі з autossh , використовуючи Systemd сокет-активацію для на вимогу нересту (повторно). Це не спрацювало, я думаю (моя версія) ssh
не може приймати дескриптори файлу сокета.
Я знайшов документацію ( 1 , 2 ) та приклад використання systemd-socket-proxyd
-tool для створення 2 "обгорткових" служб, "служби" та "сокета":
$ cat ~/.config/systemd/user/SocksProxyHelper.socket
[Unit]
Description=On Demand Socks proxy into Work
[Socket]
ListenStream=8118
#BindToDevice=lo
#Accept=yes
[Install]
WantedBy=sockets.target
$ cat ~/.config/systemd/user/SocksProxyHelper.service
[Unit]
Description=On demand Work Socks tunnel
After=network.target SocksProxyHelper.socket
Requires=SocksProxyHelper.socket SocksProxy.service
After=SocksProxy.service
[Service]
#Type=simple
#Accept=false
ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:9118
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
$ systemctl --user daemon-reload
Це, здається, працює, поки не ssh
помре або не вб'є. Тоді він не буде повторно створювати ікру при наступній спробі з'єднання, коли слід.
Запитання:
- Чи / usr / bin / ssh дійсно не може приймати сокети, передані системою? Або лише новіші версії? Моя - з up2date Debian 8.9 .
- Чи можуть лише параметри root використовувати
BindTodevice
опцію? - Чому моя служба проксі не відновлюється належним чином при першому новому з'єднанні після відмирання старого тунелю?
- Це правильний спосіб налаштувати проксі-проксі-шкарпетки "на вимогу"? Якщо ні, то як це зробити?
autossh
.
autossh
слід подбати про повторне підключення у випадку збою (хоча це не системний шлях).