Estou executando um Ubuntu Server 12.04 e recentemente o configurei para fazer o NAT para meu laptop. Como o servidor tem apenas uma NIC, segui as instruções on-line para criar um dispositivo de rede virtual (eth0: 0) que tenha um endereço IP da LAN, depois configurei iptables e UFW para permitir o compartilhamento de internet. No entanto, apenas alguns dias atrás, descobri que uma das páginas do PHP hospedadas no servidor falhou sem motivo aparente. Um pouco de escavação revelou que o servidor MySQL começou a recusar conexões do localhost. O mesmo aconteceu com uma página (PhpMyAdmin) que foi configurada para ser acessível somente a partir do host local (no Apache2).
O erro, conforme mostrado por $mysql --protocol=tcp -u root -p
, parece
ERROR 1130 (HY000): Host '<host name of eth0>' is not allowed to connect to this MySQL server
No entanto, o engraçado é que eu configurei o servidor mysql para permitir o acesso root do host local (apenas). Além disso, o servidor mysql escuta apenas em 127.0.0.1:3306
, como mostrado por:
sudo netstat -npa | head
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1029/mysqld
que significa que a conexão pode ter vindo somente de 127.0.0.1
(Note que o MySQL está funcionando porque eu ainda posso me conectar a ele via sockets de domínio unix)
Na verdade, parece que todas as conexões tcp originadas de 127.0.0.1 a 127.0.0.1 aparecem para qualquer daemon local proveniente do endereço IP eth0. De fato, o apache2 me permitiu acessar o PhpMyAdmin depois que eu adicionei allow <eth0 IP address>
.
A seguir estão minhas configurações de rede (editadas):
/ etc / hosts:
127.0.0.1 localhost
211.x.x.x <host name of eth0> <server name>
#IPv6 Defaults follows ....
/ etc / network / interfaces:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 211.x.x.x
netmask 255.255.255.0
gateway 211.x.x.x
dns-nameservers 8.8.8.8
# dns-* options are implemented by the resolvconf package, if installed
dns-search xxxxxxx.com
hwaddress ether xx:xx:xx:xx:xx:xx
auto eth0:0
iface eth0:0 inet static
address 192.168.57.254
netmask 255.255.254.0
broadcast 192.168.57.255
network 192.168.57.0
/etc/ufw/sysctl.conf:
#Uncommented the following lines
net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1
/ etc / default / ufw:
DEFAULT_FORWARD_POLICY="ACCEPT" #Changed DROP to ACCEPT
/etc/init/internet-sharing.conf (script upstart que escrevi), script de pré-inicialização da seção:
iptables -A FORWARD -o eth0 -i eth0:0 -s 192.168.57.22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
Observe novamente que meu problema aqui é que os programas não podem acessar os serviços tcp localhost , do próprio , e esse acesso é bloqueado porque os serviços têm controle de acesso permitindo apenas 127.0.0.1. Eu não tenho nenhum problema conectando (como em conexões TCP) a serviços via tcp, mesmo se os serviços escutarem somente em 127.0.0.1. Eu faço NÃO quero me conectar aos serviços de outro computador.