Ok, ainda estou trabalhando na criação de um servidor http dmz'd
Então, agora eu tenho um túnel ethernet usando ssh -w 0: 0 e tenho interfaces em cada extremidade que podem se comunicar:
pergunta anterior
Então, agora estou lutando para que esse servidor http fique visível para a rede externa. Aqui está a configuração completa
Então eu crio uma nova instância ec2 e executo a configuração:
source ./HOST
scp -i green.pem server/* root@$HOST:
ssh -i green.pem root@$HOST ./setup
por sua vez, executa a configuração na máquina remota:
apt-get update
apt-get install telnet
echo 1 | tee /proc/sys/net/ipv4/ip_forward
echo "PermitTunnel yes" >> /etc/ssh/sshd_config
/etc/init.d/ssh restart
inicio a conexão ssh:
sudo ./runserver $ HOST:
HOST=$1
ssh -i green.pem root@$HOST -w 0:0 -o Tunnel=ethernet -o ServerAliveInterval=60
então dentro desse termo ssh eu começo a rotear o redirecionamento do iptables:
#####
# server routing
# bring up the tap
ifconfig tap0 up
# route all traffic for 192.168.2.* through it
ip route add 192.168.2.0/24 dev tap0
#####
# server iptables
REMOTE_INTERNAL_IP=$1
iptables -F
iptables -t nat -F
### end init firewall .. Start DMZ stuff ####
# forward traffic between DMZ and LAN
iptables -A FORWARD -i eth0 -o tap0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tap0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Route incoming port to DMZ server 192.168.2.1
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8000 -j DNAT --to-destination 192.168.2.1:8000
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to $REMOTE_INTERNAL_IP
### End DMZ .. Add other rules ###
finalmente no cliente adiciono as rotas e o encaminhamento de porta
##########
# client
HOST=$1
# bring up the tap
ifconfig tap0 up
# put an ip on it so we can listen
ifconfig tap0 192.168.2.1
# add an explicit route for our ssh
ip route add $HOST via 192.168.1.1 dev eth0
# make the tap the default routing
ip route replace default dev tap0
# remove the default link
#ip route del 192.168.2.0/24 dev tap0 proto kernel scope link src 192.168.2.1
e eu inicio o servidor web
python -m SimpleHTTPServer
quando eu faço um telnet 192.168.2.1 de qualquer servidor ele passa bem.
mas se eu fizer um telnet para $ THE_REAL_IP, não funciona.
se eu colocar uma regra de iptables MASQUERADE, então funciona bem, mas estou fazendo isso para evitar o MASQUERADE. Eu quero que o IP de origem fique no pacote.
Alguma idéia do que estou fazendo errado?
-----
mais informações
-----
Ok, agora eu tentei muito mais conjuntos de tentativas. E ainda nada funciona.
O que eu pensei que poderia funcionar seria adicionar isso ao cliente:
# these should route packets back to tap0
ip rule add from 192.168.2.0/24 table 42
ip route add default dev tap0 table 42
Porque isso deve colocar uma regra forçada para tudo o que está escrito para 192.168.2.1 deve voltar através dessa interface tap0. Mas isso não funciona, infelizmente.
Também tentei associar um ip com o tap0 no lado remoto.
ifconfig tap0 192.168.2.5
E isso parece interessante porque agora eu não preciso configurar o roteamento, o sistema parece fazer quase automaticamente:
#####
# server routing
# bring up the tap
ifconfig tap0 192.168.2.5
ifconfig tap0 up
# route all traffic for 192.168.2.* through it
ip route add 192.168.2.0/24 dev tap0
#####
# server iptables
iptables -F
iptables -t nat -F
# forward traffic between DMZ and LAN
iptables -A FORWARD -i eth0 -o tap0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tap0 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Route incoming port to DMZ server 192.168.2.1
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8000 -j DNAT --to-destination 192.168.2.1:8000
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
### End Server ####
#############################
#############################
##########
# client
echo 1 | tee /proc/sys/net/ipv4/ip_forward
# bring up the tap
ifconfig tap0 up
# put an ip on it so we can listen
ifconfig tap0 192.168.2.1
# these should route packets back to tap0
# but they actually don't make any difference
#ip rule add from 192.168.2.0/24 table 42
#ip route add default dev tap0 table 42