редактировать: Хорошо, я постараюсь прояснить это. То, что я пытаюсь достичь, - это просто переадресация порта через мой сервер openvpn, размещенный в OpenVZ, на службу, работающую на клиенте. Есть несколько различных сервисов, которые я бы хотел пересылать, например, веб-сервер или клиент Bittorent. Допустим, я просто хочу установить функциональное соединение netcat с этой топологией:
интернет ---> [-> сервер (1.2.3.4:15555)] - nat - / -> openvpn-server (10.8.0.1) - \ -> клиент, на котором запущен веб-сервер (10.8.0.6:15555)
или ....
(inet) ---> | (общедоступный IP-адрес) -nat-through-openvpn-server-- | -> to-client- \ 10.8.0.6 (пункт назначения)
Где inet представляет любой хост в Интернете, 1.2.3.4 представляет собой общедоступный IP-адрес моего сервера, а 10.8.0.6 представляет клиента ovpn, на котором будет размещен сервер, к которому я хотел бы получить доступ из-за VPN, по адресу / порту 1.2. .3.4: 15555
Вот мой 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
Поэтому я бы хотел, чтобы хосты в Интернете могли подключаться к прослушивателю netcat (или веб-серверу) на общедоступном IP-адресе сервера, преобразованном через NAT через сервер openvpn, к клиенту openvpn.
Я задал этот вопрос вчера вечером и удалил его, потому что думал, что понял ответ, но оказалось, что нет .. Если это похоже на повторяющийся вопрос, прошу прощения. Я искал и пытался следовать рекомендациям из других веток по этой теме. Ситуация такова, что у меня Ubuntu Minimal vps. Это контейнер OpenVZ. В основном он используется как сервер openvpn. Топология сети - p2p. Я пытаюсь перенаправить порт клиенту (скажем, 10.8.0.6, p2p 10.8.0.5) через общедоступный IP-адрес сервера (пример 1.2.3.4), чтобы определенная служба (скажем, apache) была доступна с адреса VPN 1.2. 3.4.
Я знаю, что, поскольку сервер является контейнером OpenVZ, необходимо использовать определенные обходные пути iptables, например, для 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
Это нормально работает. Я также могу перенаправить трафик, предназначенный для сервера, с одного порта на другой:
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
Это тоже работает, хотя я бы предпочел, чтобы порт назначения (9001) не был открыт для всего мира, но иначе я не смог бы заставить его работать. То, что я вообще не могу заставить работать, - это пересылка трафика, предназначенного для общедоступного IP-адреса сервера ($ EXT_IP в приведенном выше примере) по определенному порту одному из клиентов VPN. Я пробовал делать это несколькими разными способами. (Мне также интересно, усложняет ли это топология точка-точка?) Я попытался использовать такие правила, как описано в другом потоке:
$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 означает исходящий IP-адрес или адрес venet0: 1. VPN-трафик направляется через venet0: 0 на venet0: 1)
Затем я настроил прослушиватель netcat: nc -l 0.0.0.0 -p 15555
И использовал этот сайт для проверки соединения, которое наконец показало некоторый прогресс:
invalid connection to [10.8.0.6] from (UNKNOWN) [66.240.174.69] 55814
По крайней мере, теперь я знаю, что трафик перенаправляется, и это начало. Поэтому я подумал, может быть, мне нужно добавить правило постмаршрутизации, чтобы трафик знал, куда нужно отправлять обратно.
$IPT -A POSTROUTING -t nat -p tcp -d 10.8.0.6 --dport 15555 -j SNAT --to-source $OUT_IP:15555
Получил тот же результат. я так разочарован тем, сколько часов я потратил, пытаясь переадресовать один порт для клиента. Я был бы очень признателен за помощь!
Наконец-то я заставил это работать. Оказывается, пакеты не пересылались через сервер. В итоге мне понадобились эти правила ниже. Я написал этот небольшой скрипт для включения / отключения правила переадресации портов.
## Port Forwarding to Client ##
fwd_EN="false" # Change to 'true' to enable
ext_if="venet0" #
int_if="tun0" #
int_ip="10.9.0.6" # client to forward to
int_PRT="15555"
if [[ $fwd_EN == "true" ]]; then
echo Warning: Port Forwarding enabled
$IPT -t nat -A PREROUTING -p tcp -i $ext_if --dport $int_PRT -j DNAT --to-dest $int_ip:$int_PRT
$IPT -A FORWARD -p tcp -i $ext_if -o $int_if -d $int_ip --dport $int_PRT -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $ext_if -o $int_if -d $int_ip -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $int_if -s $int_ip -o $ext_if -m state --state ESTABLISHED,RELATED -j ACCEPT
else echo Info: Port Forwarding Disabled
fi
Теперь я могу настроить прослушиватель nc на клиенте и с удаленного хоста запустить nc 1.2.3.4 15555
и связь работает!
anon@vpnclient:~$ nc -l -v -p 15555
Listening on [0.0.0.0] (family 0, port 15555)
Connection from [x.x.x.x] port 15555 [tcp/*] accepted (family 2, sport 58939)
Can you see me?
yes, I can!