Editar : Ok, vou tentar deixar isso mais claro. O que eu estou tentando alcançar é simplesmente uma porta em frente, através do meu servidor OpenVZ hospedado openvpn, para um serviço em execução em um cliente. Existem alguns serviços diferentes que gostaria de encaminhar, como um servidor web ou um cliente bittorent. Por uma questão de argumento, digamos que eu queira apenas estabelecer uma conexão netcat funcional com essa topologia:
internet --- > [- > servidor (1.2.3.4:15555)] - nat - / - > openvpn-server (10.8.0.1) - \ - > cliente executando um servidor da Web (10.8.0.6:15555)
ou ....
(inet) --- > | (ip público) -nat-through-openvpn-server-- | - > para-client- \ 10.8.0.6 (destino)
Onde inet representa qualquer host na Internet, 1.2.3.4 representa o IP público do meu servidor, e 10.8.0.6 representa o cliente ovpn que hospedará o servidor, que gostaria de ser acessado por trás da VPN, no endereço / port 1.2.3.4:15555
Aqui está o meu ifconfig:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1037374 errors:0 dropped:0 overruns:0 frame:0
TX packets:1037374 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:141887598 (141.8 MB) TX bytes:141887598 (141.8 MB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:1746329 errors:0 dropped:0 overruns:0 frame:0
TX packets:3193026 errors:0 dropped:117 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:104945794 (104.9 MB) TX bytes:4356609743 (4.3 GB)
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.2 P-t-P:127.0.0.2 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:43166195 errors:0 dropped:0 overruns:0 frame:0
TX packets:44728488 errors:0 dropped:11647 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:34214141842 (34.2 GB) TX bytes:43166888251 (43.1 GB)
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:1.2.3.4 P-t-P:1.2.3.4 Bcast:1.2.3.4 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
venet0:1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:1.2.3.5 P-t-P:1.2.3.5 Bcast:1.2.3.5 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
Portanto, gostaria que os hosts da Internet pudessem acessar um ouvinte de netcat (ou servidor da web) no endereço IP público do servidor, NAT através do servidor openvpn, para um cliente openvpn.
Eu fiz esta pergunta ontem à noite e a deletei porque achei que tinha descoberto a resposta, mas acontece que eu não tinha.
Se isso parece ser uma pergunta duplicada, peço desculpas. Eu pesquisei e tentei seguir as recomendações encontradas em outros tópicos sobre este tópico. A situação é que eu tenho um Ubuntu Minimal vps. É um contêiner OpenVZ. Está sendo usado principalmente como um servidor openvpn. A topologia de rede é p2p. Estou tentando encaminhar uma porta para um cliente (digamos 10.8.0.6, p2p 10.8.0.5) através do IP público do servidor (exemplo 1.2.3.4) para que um determinado serviço (digamos, o apache) seja acessível a partir do endereço VPN 1.2. 3.4.
Eu sei que, como o servidor é um contêiner OpenVZ, certas soluções alternativas do iptables precisam ser usadas, como para o openvpn:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s $VPN_SN -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s $VPN_SN -o venet0 -j SNAT --to-source $OUTIP
Isso funciona bem. Eu também posso redirecionar o tráfego destinado ao servidor de uma porta para outra:
iptables -A INPUT -i venet0 -d $EXTIP -p tcp --dport 80 -m state --state NEW -j ACCEPT
$IPT -t nat -A PREROUTING -p tcp -d $EXTIP --dport 80 -j REDIRECT --to-port 9001
iptables -A INPUT -i venet0 -p tcp --dport 9001 -j ACCEPT
Isso também funciona, embora eu prefira não ter a porta de destino (9001) aberta ao mundo, mas não consegui fazê-la funcionar de outra forma. O que eu não consigo trabalhar é o encaminhamento do tráfego destinado ao IP público do servidor ($ EXT_IP no exemplo acima) em uma determinada porta para um dos clientes VPN. Eu tentei fazer isso de várias maneiras diferentes. (Eu também estou querendo saber se a topologia ponto-a-ponto está complicando isso?) Eu tentei usar regras como descrito em outro segmento:
$IPT -A INPUT -p tcp -d $OUTIP --dport 15555 -j ACCEPT
$IPT -A FORWARD -i venet0 -p tcp --dport 15555 -j ACCEPT
$IPT -t nat -A PREROUTING -i venet0 -p tcp -m tcp --dport 15555 -j DNAT --to-destination 10.8.0.6:15555
(OUTIP significa endereço IP de saída ou endereço de venet0: 1. O tráfego VPN é roteado por venet0: 0 para venet0: 1)
Em seguida, configuro um ouvinte de netcat: nc -l 0.0.0.0 -p 15555
E usei este site para testar a conexão, que finalmente mostrou algum progresso:
invalid connection to [10.8.0.6] from (UNKNOWN) [66.240.174.69] 55814
Agora, pelo menos, eu sei que o tráfego está sendo encaminhado, o que é um começo. Então eu pensei que talvez eu deva adicionar uma regra de pós-venda para que o tráfego saiba onde ser mandado de volta para
$IPT -A POSTROUTING -t nat -p tcp -d 10.8.0.6 --dport 15555 -j SNAT --to-source $OUT_IP:15555
Eu tenho o mesmo resultado. Eu sou tão frustrada por quantas horas eu gastei tentando encaminhar uma porta dang para um cliente. Eu apreciaria seriamente alguma ajuda!