Я пытаюсь реализовать очень простую передачу Ubuntu от одного IP до другого. Я не забочусь о безопасности на том этапе (это работает в песочнице теперь), мне просто нужен он для работы.
Я установил FORWARD
политика к ACCEPT
и позволил передать в sysctl.conf
. Затем, я добавил передающие правила TCP, таким образом, у меня есть это:
# Filter settings
*filter
# Disallow incoming traffic
:INPUT DROP
# Allow forward traffic
:FORWARD ACCEPT
# Allow outgoing traffic
:OUTPUT ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT
:POSTROUTING ACCEPT
:OUTPUT ACCEPT
# Required to share Internet
-A POSTROUTING -j MASQUERADE
-A PREROUTING -p tcp -d 192.168.0.107 --dport 80 -j DNAT --to-destination 192.168.0.100:80
COMMIT
Компьютерный IP Ubuntu 192.168.0.107
. Другой компьютерный IP 192.168.0.100
. Так, я хочу перенаправить порт Ubuntu 80 к другому компьютерному адресу. Другой компьютер выполняет сервер HTTP, таким образом, http://192.168.0.100
на Ubuntu компьютер открывает демонстрационную веб-страницу.
Однако, когда я пытаюсь открыться http://192.168.0.107
, это перестало работать. Когда я работаю curl
для получения лучшего сообщения об ошибке я получаю это:
curl: (7) Failed to connect to 192.168.0.107 port 80: Connection refused
У кого-либо есть идея этой ошибочной причины?
Этот ответ основан на предположении, который Вы пытаетесь портировать вперед на той же подсети и через один сетевой интерфейс, который необычен.
Вы не имели дело с обратным каналом правильно или использовали корректное пред и отправляете таблицы маршрутизации. Необходимо отобразить пакет возврата так, чтобы это, казалось, к отправителю прибыло из исходного IP-адреса, к которому это отправило запрос во-первых. Вот протестированный пример, но для моей LAN:
#!/bin/sh
#
# 1070028_firewall 2018.08.09 Ver:0.01
# Basic port forwarding on one interface.
# Note: this method is unusual.
# Currently for this question:
# https://askubuntu.com/questions/1070028/why-does-ubuntu-16-forwarding-not-work
#
# The location of the iptables program
#
IPTABLES=/sbin/iptables
# Set some stuff
#
EXTIF="ens5"
UNIVERSE="0.0.0.0/0"
EXTIP="192.168.111.120"
#
echo Enabling forwarding...
echo "1" > /proc/sys/net/ipv4/ip_forward
# Clearing any previous configuration
# and setting policies as per the question
iptables -P INPUT DROP
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD ACCEPT
iptables -F FORWARD
iptables -t nat -F
iptables -X
# Clear the counters
iptables -Z
iptables -t nat -Z
# loopback interfaces are valid.
$IPTABLES -A INPUT -i lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT
# forward path
$IPTABLES -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 -j DNAT --to 192.168.111.1:80
# with a default policy of ACCEPT, the following rule is not needed.
# shown here for completeness only.
# $IPTABLES -A FORWARD -p tcp -i $EXTIF -d 192.168.111.1 --dport 80 -j ACCEPT
# return path
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j SNAT --to-source $EXTIP
Необходимо смочь использовать ПОДМЕНУ вместо SNAT, но я не протестировал его.