проброс портов для приложения в сетевом пространстве имен с помощью vpn

ну, я понял:

rsync -av --files-from=/path/to/files.txt / /destination/path/
13
01.02.2016, 23:47
2 ответа

Вот мое решение для наводнения. Нет необходимости в iptables.Вот шаги:

  1. Запустите свой туннель openvpn
  2. Создайте пространство имен и перенесите туда свой туннель openvpn:
ip netns add $NS
# Wait for the TUN to come up
while [[ $(ip route|grep $TUN|wc -l) == 0 ]]; do sleep 1; done
MY_IP=$(ip addr show $TUN|grep inet|cut -d' ' -f6|cut -d'/' -f1)
# The way you extract gateway IP might be different for your openvpn connection
GATEWAY_IP=$MY_IP
# jail my $TUN (VPN interface) into the namespace
ip link set $TUN netns $NS
# Bring the interface up with a subnet (equivalent to the one given to me by VPN server)
ip netns exec $NS ifconfig $TUN $MY_IP/24 up
# Bring loopback up
ip netns exec $NS ifconfig lo 127.0.0.1/8 up
# Set up remote gateway (your pointtopoint VPN IP address)
ip netns exec $NS route add default gw $GATEWAY_IP
  1. Установите veth-соединение между пространством имен по умолчанию и тем, которое вы создали:
# Set up veth interfaces for communication between namespaces
ip link add veth0 type veth peer name veth1
# Move the second veth to your namespace
ip link set veth1 netns $NS
# give an IP from unused IP range to first veth
ifconfig veth0 10.1.1.1/24 up
# And the second one
ip netns exec $NS ifconfig veth1 10.1.1.2/24 up
# TODO: set up a bridge between veth1 and eth interface to let it communicate with LAN
# Set up DNS client. ip netns will emulate /etc/resolv.conf using this file:
mkdir -p /etc/netns/$NS
echo "nameserver 8.8.4.4" >/etc/netns/$NS/resolv.conf
  1. Запустите потоп в $ NS и ваш потоп в пространстве имен по умолчанию. Укажите deluge-web на IP-адрес 10.1.1.2 veth, где deluge будет прослушивать свое соединение.

Вуаля! Вы защищены VPN, а ваш deluge-web находится в свободном доступе в вашей домашней сети

3
27.01.2020, 19:53

Ответ @AndrDevEK полезен. Чтобы расширить это, вы можете не захотеть устанавливать socat. В этом случае вы можете добиться того же с помощью слегка запутанной настройки переадресации SSH-порта -. В частности, здесь полезна функция переадресации порта -в/из доменного сокета unix -, поскольку доменные сокеты unix -работают независимо от сетевых пространств имен :

.
sudo ip netns exec myvpn su -c "ssh -N -L /tmp/myunixsock:localhost:8112 localhost" $USER &
ssh_pid1=$!
ssh -N -L localhost:8112:/tmp/myunixsock localhost &
ssh_pid2=$!

Очистка:

sudo kill $ssh_pid1
kill $ssh_pid2
rm /tmp/myunixsock

Первый ssh -N -Lзапускается в пространстве имен myvpn. Это создает сокет домена unix -/tmp/myunixsockи прослушивает его. Входящие подключения перенаправляются на localhost :8112 (внутри пространства имен myvpn ). Второй ssh -N -Lзапускается в пространстве имен по умолчанию. Это создает TCP-порт прослушивания и перенаправляет входящие соединения на сокет домена unix -.

Следует отметить, что для того, чтобы это работало,sshвнутри вашего сетевого пространства имен должно работать, если оно еще не работает (и полезна работа с открытым ключом без пароля):

sudo ip netns exec myvpn ip link set up dev lo
sudo ip netns exec myvpn /usr/sbin/sshd -o PidFile=/run/sshd-myvpn.pid
ssh-copy-id localhost
2
27.01.2020, 19:53

Теги

Похожие вопросы