2016-01-05 2 views
-2

У меня есть виртуальная машина в VirtualBox. Благодаря DHCP он получает определенный локальный IP-адрес. Например, 192.168.18.16Как сделать виртуальную машину (VM) на linux всегда доступной с перенаправлением UPNP в реальном времени с помощью upnpc

Я использую пакет upnpc (miniupnpc), чтобы создать перенаправление из Интернета в определенный порт. Например, для FTP (порт 21) я могу создать перенаправление с внешнего порта 1621 на 21 порт виртуальной машины. Я использую хрон с линией:

* * * * * upnpc -a 192.168.10.16 21 1621 TCP 

My VM может работать в другой сети и получает различный IP, такие как 192.168.19.16, 192.168.30.16 ...

Я не хочу, чтобы изменить вручную перенаправление в зависимости от сети, где выполняется. Поэтому я стараюсь в кронтаб -e:

* * * * * upnpc -a $(ifconfig eth0 | grep 'adr:' | cut -d: -f2 | awk '{ print $1}') 21 1621 TCP 

Но это не работает, почему? Что я мог сделать ?

Thx за ответы

+0

Этот сайт предназначен для вопросов о программировании. Вы, скорее всего, получите ответы на вопросы об использовании существующих программ на [superuser] (http://superuser.com) – simonc

+0

Thx для вашего комментария, но я считаю это bash-программированием. Согласны ли вы? – Platypus

+0

Ваш 'ifconfig eth0 | grep 'adr:' | cut -d: -f2 | awk '{print $ 1}' ', вероятно, глючит. Посмотрите на вывод ifconfig и исправьте его. Например, на моей машине это ничего не держит, а 'ifconfig eth0 | grep 'inet' | awk '{print $ 2}' 'дает мне 198.18.32.1, который действительно является IP-адресом моего eth0. – jbm

ответ

0

Я хочу избежать использовать сценарий для одной команды Ligne, но это работает:

ВИМ redirect.sh

#!/bin/bash 
IP=$(ifconfig eth0 | grep 'adr:' | cut -d: -f2 | awk '{ print $1}') 

PORT_EXTERN=${$1:-0} 
PORT_INTERN=${$2:-0} 
PROTOCOL=${$3:-TCP} 
COMMENT=$4 
IP_DESTIN=${$5:-$IP} 

upnpc -a $IP_DEST $PORT_INTERN PORT_EXTERN $PROTOCOL #-e $COMMENT 

И в кронтаб -e:

* * * * * /path_to_script/redirect.sh 1621 21 TCP MY_REDIRECTION