Альтернатива iptables: используйте сетевые пространства имен. От имени пользователя root выполните что-то вроде
ip addr show dev tun0
ip netns add vpnssh
ip link set tun0 netns vpnssh
ip netns exec vpnssh su -c 'xterm &' user_name
, где tun0
- сетевой интерфейс вашей конечной точки OpenVPN, а имя_пользователя
- пользователь, который запускает ssh
. Обратите внимание на адреса inet (назовем его vpn_local_ip
) и однорангового узла ( vpn_peer_ip
) для tun0
.
Теперь у вас есть xterm, в котором все подпроцессы только «видят» tun0
(проверьте с помощью ip link
), но, к сожалению, его перемещение отключилось. Итак, в этом окне используйте sudo
to
ip link set tun0 up
ip addr add vpn_local_ip peer vpn_peer_ip dev tun0
ip route del default
ip route add default via vpn_local_ip dev tun0
Теперь вы можете запустить ssh
в этом окне, и он будет использовать соединение OpenVPN. Скриптируйте все как требуется (используйте ip netns exec vpnssh ...
для второй части).
Вы можете посмотреть на вывод 'lsof | grepDeleted'... чтобы узнать, занимают ли удаленные файлы место на диске.
Затем вы можете решить перезапустить или перезагрузить процессы, все еще удерживающие удаленные файлы, чтобы очистить используемое дисковое пространство.