1

Я использую Ubuntu Server 12.04, и недавно я настроил его для работы с NAT для моего ноутбука. Поскольку на сервере есть только один сетевой адаптер, я следовал инструкциям в Интернете, чтобы создать виртуальное сетевое устройство (eth0:0) с IP-адресом в локальной сети, а затем дополнительно настроил iptables и UFW, чтобы разрешить общий доступ к Интернету. Однако всего несколько дней назад я обнаружил, что одна из страниц PHP, размещенная на сервере, потерпела неудачу без видимой причины. Небольшое копание показало, что сервер MySQL начал отказывать соединениям от localhost. То же самое произошло со страницей (PhpMyAdmin), которая была настроена для доступа только с локального хоста (в Apache2).

Ошибка, как показано в $mysql --protocol=tcp -u root -p выглядит следующим образом

ERROR 1130 (HY000): Host '<host name of eth0>' is not allowed to connect to this MySQL server

Тем не менее, забавно то, что я настроил сервер mysql для разрешения root-доступа с локального хоста (только). Кроме того, сервер MySQL слушает только 127.0.0.1:3306 , как показано:

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

это означает, что соединение могло быть только с 127.0.0.1 (обратите внимание, что MySQL работает, потому что я все еще могу подключиться к нему через доменные сокеты Unix)

По сути, кажется, что все tcp-соединения, происходящие от 127.0.0.1 до 127.0.0.1, кажутся любому локальному демону происходящим с IP-адреса eth0. Действительно, apache2 позволил мне получить доступ к PhpMyAdmin после того, как я добавил allow <eth0 IP address> .

Ниже приведены мои сетевые конфигурации (отредактированы):

/ и т.д. / хосты:

127.0.0.1       localhost
211.x.x.x   <host name of eth0>      <server name>
#IPv6 Defaults follows ....

/ и т.д. / сеть / интерфейсы:

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

/ И т.д. / по умолчанию / UFW:

DEFAULT_FORWARD_POLICY="ACCEPT" #Changed DROP to ACCEPT

/etc/init/internet-sharing.conf (сценарий upstart, который я написал), раздел pre-start script:

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

Отметим еще раз , что моя проблема в том , что программы не могут получить доступ к локальный TCP услуг, с самого сервера, и что доступ заблокирован , поскольку услуги , контроль доступа , разрешающее только 127.0.0.1. У меня нет проблем с подключением (как в TCP-соединениях) к сервисам через tcp, даже если сервисы прослушивают только 127.0.0.1. Я не хочу подключаться к сервисам с другого компьютера.

1 ответ1

0

Похоже, что проблема заключается в третьем правиле iptables NAT. Поскольку я не указал и не применил правило фильтрации для окончательного правила nat POSTROUTING, оно каким-то образом совпало с пакетами локального хоста и преобразовало их исходные IP-адреса в адрес eth0 . Фиксированный скрипт запуска показан ниже:

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 -s 192.168.57.22 -t nat -j MASQUERADE

Обратите внимание на дополнительную опцию -s 192.168.57.22 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .