Interface de rede primária no Linux

4

Eu tenho uma caixa de servidor com duas interfaces. Uma das interfaces está conectada à rede interna, outra - ao externo.

Eu atribuí IP 192.168.1.200 à interface interna (eth0). Eu tenho alguns daemons locais ouvindo nesta interface IP / (cups, nginx, pdns).

O IP externo é 192.168.0.91 (eth1). Aqui eu tenho apenas NAT masquerading. Coisas estranhas acontecem sempre que eu estou tentando acessar a caixa do servidor de si mesmo.

Se eu estou tentando abrir a página da Web, localizada em 192.168.1.200, o servidor usa o endereço 192.168.0.91 e estou recebendo permissão negada (servidor protegido para servir conteúdo somente na rede interna).

Se eu derrubar eth1, trabalho de servidor OK e usar IP interno. Mas, assim que eu abrir a eth1, a IP imediatamente pegará o IP como primário e eu irei ter a permissão negada novamente.

Como posso definir explicitamente o IP / interface principal para usar?

Estou executando a versão de 64 bits do Gentoo Linux. Ambos os drivers do nic são compilados como módulos. Estou usando o systemd como meu sistema init.

EDITAR:

Obrigado pelas respostas, mas a parte mais interessante está chegando:

atomic ~ # cat /etc/resolv.conf
domain local
search local
nameserver 192.168.1.200

atomic ~ # cat /etc/hosts
...
192.168.1.200   atomic ns.atomic.local atomic.local
...

Endereço resolvido apenas em OK:

atomic ~ # dig atomic.local 192.168.1.200

; <<>> DiG 9.9.4 <<>> atomic.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38797
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;atomic.local.          IN  A

;; ANSWER SECTION:
atomic.local.       604800  IN  A   192.168.1.200

;; Query time: 42 msec
;; SERVER: 192.168.1.200#53(192.168.1.200)
;; WHEN: Tue May 27 13:37:04 EEST 2014
;; MSG SIZE  rcvd: 55

E logs Nginx de acesso via wget:

atomic ~ # wget atomic.fhn
--2014-05-27 13:45:58--  http://atomic.local/
Resolving atomic.local... 192.168.1.200
Connecting to atomic.local|192.168.1.200|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

[ <=>                                              ] 0  --.-K/s   in 0s      

2014-05-27 13:45:58 (0.00 B/s) - ‘index.html’ saved [0]

atomic ~ # tail -n 1 /var/log/nginx/access_log
192.168.0.91 - - [27/May/2014:13:45:58 +0300] "GET / HTTP/1.1" 200 5 "-" "Wget/1.14 (linux-gnu)"

Eu tenho o status HTTP 200 / OK porque desabilitei a filtragem de IP / rede enquanto o problema não foi resolvido.

Tabela de roteamento:

192.168.0.0/30 dev wan  proto kernel  scope link  src 192.168.0.2 
192.168.1.0/24 dev lan  proto kernel  scope link  src 192.168.1.200 

EDIT2:

Tabela de roteamento com métrica usada:

192.168.0.0/30 dev wan  scope link  metric 20 
192.168.1.0/24 dev lan  scope link  metric 10 
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.0.0 dev wan  table local  proto kernel  scope link  src 192.168.0.2 
local 192.168.0.2 dev wan  table local  proto kernel  scope host  src 192.168.0.2 
broadcast 192.168.0.3 dev wan  table local  proto kernel  scope link  src 192.168.0.2 
broadcast 192.168.1.0 dev lan  table local  proto kernel  scope link  src 192.168.1.200 
local 192.168.1.200 dev lan  table local  proto kernel  scope host  src 192.168.1.200 
broadcast 192.168.1.255 dev lan  table local  proto kernel  scope link  src 192.168.1.200 
    
por GeekMagus 27.05.2014 / 09:55

2 respostas

3

O que você precisa é garantir que a rota da LAN tenha prioridade sobre a da WAN. O problema está aqui:

192.168.0.0/30 dev wan  proto kernel  scope link  src 192.168.0.2 
192.168.1.0/24 dev lan  proto kernel  scope link  src 192.168.1.200

192.168.0.0/30 também abrange 192.168.1.0/24. Assim, você tem que dizer à pilha TCP / IP para preferir a última quando aplicável. Caso contrário, ela pode escolher aleatoriamente (esperaria que a maioria das implementações sempre usasse a primeira) - use o argumento metric , por exemplo:

ip route add 192.168.1.0/24 dev lan metric 10
ip route add 192.168.0.0/30 dev wan metric 20

(você obviamente precisará remover as rotas existentes primeiro).

    
por 01.06.2014 / 21:09
1

Como jofel já disse, não existe uma interface primária no linux. O que realmente acontece: se o seu computador quer enviar um pacote para algum lugar, ele conhece o seu ip de destino. Mas um IP de origem também é necessário para ser fornecido em um pacote, e este é o qual será preenchido a partir da lista de interfaces e da tabela de roteamento.

No caso de um endereço local, as coisas serão um pouco mais complexas (e não mais simples como desejávamos).

A maneira mais simples de usar o endereço 192.168.1.200 explícito em seu url (ou um nome de host que seja resolvido exatamente para esse endereço). Você não escreveu, mas acho que está usando uma url com um nome de host para obter o documento real, e esse nome de host resolve - por padrão - o endereço externo.

    
por 27.05.2014 / 11:35