-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcap6.tex
executable file
·2839 lines (2489 loc) · 131 KB
/
cap6.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\chapter{Rede e Internet}
Nos nossos tempos modernos de globalização e troca de informações, ou
``Sociedade da Informação'', como os sociólogos vêm nomeando essa
nossa nova era\cite{CASTELLS2000}, um computador isolado, sem
conectividade em rede é pouco mais útil que uma máquina de
escrever. Na realidade, é impossível pensar em uma sociedade aonde
sejamos cada vez mais dependentes do computador e das
TIC\footnote{Tecnologias da Informação e Comunicação}. Mesmo com a
baixa quantidade de usuários relativos a outras tecnologias, a
conectividade em rede vem provocando muito mais impactos (e porque não
dizer, estragos) na sociedade mundial do que outras tecnologias de
informação.
Essa introdução visa dar ao leitor uma idéia da importância que tem o
tópico administração de redes em um sistema atual. Na prática, quase
sempre estamos administrando uma rede de alguma forma, nem que seja
realizando algumas configurações para conectarmo-nos à Internet.
De qualquer forma, o que veremos aqui, assim como no Capítulo
anterior, é apenas a introdução à administração de redes e
Internet. Na prática, como o GNU/Linux, assim como a maioria dos
sistema baseados em Unix tem seus serviços de rede baseados em TCP/IP,
tanto a conectividade local quanto a de/para a Internet é oferecido
pelos mesmos comandos. Para maiores informações, um documento muito
interessante a ser consultado (apesar de um tanto antigo) é o
\emph{The Linux Network Administrators' Guide, Second Edition},
de \citeonline{NAG2000}. Embora antigo e não falando de alguns
assuntos interessantes, como a configuração de certos servidores, ele
oferece bases reforçadas aqueles que quiserem aprender de maneira mais
aprofundada o assunto de redes em GNU/Linux.
Além disso, o projeto \emph{Linux HOWTO Project}\cite{HOWTO2006} tem
vários documentos interessantes na questão de redes. Entre eles os
principais são o \emph{Linux Network HOWTO}\cite{NET31999}, que,
embora antigo e sem manutenção ainda pode conter várias informações
úteis; e o par \emph{Linux Ethernet HOWTO}\cite{ETHERNET2003}, e o
\emph{Linux Wireless HOWTO}\cite{WIRELESS2002}, que mostram
informações sobre as principais tecnologias de rede da atualidade.
\begin{quotation}
\textbf{Atenção:} Não falaremos nesse documento sobre a parte de
detecção de \emph{hardware}, pois a maioria das distros contam com
bons sistemas de configuração e até mesmo com tecnologias de conexão à
quente, como \texttt{hotplug} e \texttt{kudzu}. Vamos nos concentrar
na questão da base lógica. Os documentos já citados poderão ajudar na
questão de configuração de \emph{kernel}.
\end{quotation}
\section{Bases do TCP/IP}
Nessa seção falaremos um pouco de teorias importantes no uso do
TCP/IP. No caso, ainda não entraremos nos detalhes específicos do
GNU/Linux em relação ao TCP/IP, sendo uma introdução rápida ao
funcionamento do TCP/IP.
\subsection{História da Internet e do TCP/IP}
O TCP/IP é um protocolo de rede criado pela DARPA (\emph{Defense
Advanced Research Projects Agency} --- \textbf{Agência de Projetos
de Pesquisa de Defesa Avançada}) no ano de 1958. No auge da Guerra
fria, o projeto da DARPA era desenvolver uma rede
\emph{não-hierárquica}, que, em caso de guerra, pudesse permanecer
operacional mesmo com a destruição de um ou mais nós da rede. Na
prática, não existiam na época redes \emph{em malha}, aonde cada nó
se comunicava de maneira não-hierárquica com os demais, existindo
apenas redes hierárquicas. Em redes desse porte, o elo mais fraco é
o servidor: elimine-o da rede e todo o resto da mesma para de
funcionar. Foi então desenvolvida uma estrutura de redes conhecida
como ARPAnet, aonde normalmente cada nó se comunicava com pelo menos
outros dois.
Com o tempo, o protocolo original da rede ARPAnet, o NCP
(\emph{Network Control Protocol} --- Protocolo de Controle de Rede)
foi demonstrando suas fraquezas, sendo que em 1979 começou a ser
planejado um novo protocolo para a ARPAnet. Em 1980, parte da
arquitetura foi alterada com o surgimento da RFC 761,
``\emph{Transmission Control Protocol}''\cite{RFC1980} Em 1981, foi
completada a pilha de protocolos TCP/IP, no caso com a publicação da
RFC 791, ``\emph{Internet Protocol}''\cite{RFC1981}. Sendo um
protocolo simples e rapidamente implementado em vários SOs. A
principal implementação é a BSD, que pode ser encontrada em vários
tipos de ambientes tanto livres quanto proprietários.
Com o surgimento da \emph{World-Wide Web}, a Internet se popularizou
rapidamente. Mas para os ambientes baseados em Unix (GNU/Linux entre
eles), o TCP/IP é a fonte fundamental de conectividade e transferência
de informações, por meio de serviços como Telnet\footnote{Terminal
Remoto}, FTP\footnote{\emph{File Transfer Protocol} --- Protocolo de
Transferência de Arquivos}, NIS\footnote{\emph{Network Information
Services} --- Serviços de Informações em Rede} e
NFS\footnote{\emph{Network Filesystem} --- Sitema de Arquivos em
Rede}. Portanto, mais do que apenas um sistema de conexão com outros
ambientes de rede, o TCP/IP no GNU/Linux é a \emph{própria
conectividade em rede}. Diferentemente, por exemplo, do
Windows\texttrademark{}, que originalmente usava (e ainda usa)
NetBIOS, ou do Novell Netware\texttrademark{}, que usava originalmente
o IPX/SPX, no GNU/Linux o TCP/IP é presente desde as raízes como
protocolo de rede.
\subsection{Definindo um IP}
Na prática, normalmente o IP é definido pelo seu Provedor de acesso à
Internet que determina o valor do IP que você deverá utilizar em sua
máquina (ao menos, naquela(s) que tiver(em) comunicação com a
Internet). Isso principalmente pelo fato de que não há IPs suficientes
para todas as máquinas conectadas à Internet no mundo, então os
provedores utilizam-se de combinações de elementos para "fingir" que
existem IPs suficientes para todos os usuários da Internet no mundo,
principalmente por meio do DHCP\footnote{\emph{Dynamic Host
Configuration Protocol} --- Protocolo de Configuração Dinâmica do
Host, aonde o servidor envia à máquina que deseja estabelecer a
conexão com a Internet um IP de uma pilha existente no servidor} e do
NAT\footnote{\emph{Network Address Translation} --- Tradução do
Endereço de Rede, também conhecido como \emph{IP Masquarading} ---
mascaramento de IP, técninca onde o servidor ``traduz'' os endereços
internos da rede em endereços externos via Internet, pela combinação
de endereços IP e portas TCP}. No caso, esses mecanismos não serão
estudados nessa apostila, mas farta documentação sobre eles podem ser
encontrados na Internet.
Um IP é um endereço numérico de 32 bits ($2^{32}$ combinações
existentes) que costuma ser representado em quatro grupos de 8 bits,
representados por 4 números decimais separados por pontos (notação
essa chamada de \emph{quad-dotted octects} --- quatro octetos
separados por pontos). Esses números são seqüencialmente definidos a
partir de um valor colocado em cada um dos seus quatro octetos
(variando de 0 a 255) que são colocados, e uma rede é composta, em
geral, por IPs cuja numeração seja contínua (por exemplo: todos os IPs
de 10.0.0.1 a 10.0.0.255) são considerados uma rede. Na verdade, a
Internet não possui o conceito de redes isoladas: embora na prática
seja o conjunto de redes, para a Internet não existem redes isoladas.
Com o tempo isso provocou lentidão e falhas sérias de segurança nas
trocas de informações dentro da Internet (por exemplo, obrigando um
pacote de informação a sair de dentro da rede à qual ia se destinar).
Isso veio a provocar a criação de um mecanismo de ``isolamento'', as
máscaras de sub-rede.
\subsection{Definindo máscara de sub-rede}
Conceitualmente, uma máscara de sub-rede (chamada também de
\emph{subnetwork mask} ou \emph{netmask}) é um valor que é usado para
separar o endereço de uma rede do endereço do \emph{host} dentro
daquela rede. Esse mecanismo permite dividir a rede em estruturas
lógicas chamadas \emph{sub-redes}.
Uma máscara de subrede, da mesma forma que um endereço IP, é formada
por um número binário de 32 bits. Porém, sua construção é
diferenciada: para criar-se a máscara de sub-rede, você deverá definir
em 1 todos os bits que irão indicar o endereço da rede, do digíto de
maior ordem até o dígito de menor ordem. Esses bits definem dentro da
máscara qual é o endereço da rede. Os endereços do \emph{host} na rede
são determinados pelos bits restantes.
Na prática isso funciona basicamente assim: imagine que você utilize
um IP 192.168.10.4, com uma máscara de rede de 16 bits (16 bits
setados em 1). Seu endereço pode ser representado por
192.168.10.4/16 (ao que chamamos de endereçamento
CIDR\footnote{\emph{Classless Inter-Domain Routing} --- Roteamento
entre domínios sem uso de Classes}),sendo que a subrede também pode
ser representada por 255.255.0.0.
Perceba que a máscara ficaria assim em binário o endereço de subrede.
%\begin{center}
\texttt{11111111111111110000000000000000}
%\end{center}
Utilizando então uma operação AND (E) bit a bit, temos o endereço
da rede:
%\begin{center}
\begin{center}
\begin{verbatim}
11000000101010000000101000000010
AND 11111111111111110000000000000000
------------------------------------
11000000101010000000000000000000
\end{verbatim}
\end{center}
No caso, se dividirmos o bloco em quatro octetos e fizermos a
conversão decimal, obteremos 192.168.0.0.
Utilizando um AND bit-a-bit contra a máscara \emph{invertida}, podemos
obter o \emph{endereço do host na rede}:
\begin{center}
\begin{verbatim}
11000000101010000000101000000010
AND 00000000000000001111111111111111
------------------------------------
00000000000000000000101000000010
\end{verbatim}
\end{center}
Se convertermos o bloco para a notação de quatro octetos separados por
pontos, teremos o endereço 0.0.10.4
Nesse exemplo, foi muito fácil separar a rede do \emph{host} através
da \emph{netmask}, embora na prática a complexidade pode ser alta,
pois você pode dividir sua rede fora dos limites dos octetos. Nada
impede, por exemplo, que você utilize 20 bits de \emph{netmask}. Na
realidade, esse exemplo foi construído para ser facilmente
compreensível em relação ao seu funcionamento.
\subsection{Endereços especiais}
A máscara de subrede é importante de ser entendida pois, a partir
dela, definem-se dois endereços importantes, o endereço da rede e o
endereço de \emph{broadcast}. O endereço da rede é usado como
identificação da rede como um todo e é definido por um endereço
especial aonde todos os bits da seção do \emph{host} (os bits que
ficam em \texttt{0} no \emph{netmask}) são zerados. No exemplo citado
anteriormente, podemos dizer que o endereço da rede em questão é
192.168.0.0.
O endereços de \emph{broadcast} é um endereço que qualquer máquina
deve escutar. Normalmente é um endereço aonde todos os bits da seção
do \emph{host} (os bits que ficam em \texttt{0} no \emph{netmask})
estão definidos em 1. Por exemplo, se você definir como 1 todos os 16
bits equivalentes ao endereço do \emph{host} na rede, você obterá como
endereço 192.168.255.255.
Perceba que esses endereços \emph{não podem} (ou ao menos não
deveriam) ser usados como endereços de \emph{hosts} na rede, para
evitar problemas de funcionamento incorreto da rede.
Além disso, existe um endereço fixo chamado de \emph{loopback}
(retorno), que referencia permanentemente a mesma máquina. Esse
endereço é usado principalmente em testes de sistemas de rede e
operações que poderiam ser feitas em rede, mas aonde o cliente e o
servidor das operações estão na mesma máquina. Esse endereço é chamado
normalmente de \emph{localhost} e é referenciado pelo IP
\texttt{127.0.0.1}.
Além disso, todos os IPs que com o primeiro octeto \texttt{0} são
\emph{reservados} como referência rápida a IPs dentro da mesma subrede
do \emph{host}. O mesmo vale para os IPs com primeiro octeto
\texttt{127} e alguns IPs mais altos.
\subsection{Classes de rede}
A importância das máscaras de rede surge quando você passa a entender
as \emph{classes de rede}.
No começo da Internet, uma organização chamada ICANN (\emph{Internet
Corporation for Assigned Names and Numbers} --- Corporação para a
determinação de nomes e números da Internet) era a responsável pela
administração dos endereços de IP que eram atribuídos a cada
corporação ou entidade que desejava se conectar à Internet. Para isso,
usando as máscaras de subrede e determinadas faixas de endereço, ela
criou as Classes de Rede. Essas Classes permitiam uma melhor
distribuição dos endereços de IP conforme as necessidades das
entidades envolvidas.
Por esse método, as Classes de Redes são divididas em:
\begin{itemize}
\item \textbf{Classe A:} São todos os endereços cujo bit mais
significativo dentro do endereço de rede é \texttt{0} (cobrindo
todos os IPs de \texttt{1.0.0.0} a \texttt{127.255.255.255}). Na
prática, existem 126 redes de Classe A, com $2^{24}-2$ endereços
de host por rede (lembrando de remover os endereços de rede e de
\emph{broadcast} que são reservados), usando \emph{netmask} de 8
bits (\texttt{255.0.0.0}). Normalmente grandes corporações como GE
e Citibank eram as principais favorecidas ao receber IPs da Classe
A, além dos provedores de \emph{backbone} \emph{tier 1}
(provedores da conectividade internacional pesada) ou universades
muito grandes, como a Universidade da Califórnia;
\item \textbf{Classe B:} São endereços cujo bit mais significativo é
\texttt{1} e o bit seguinte é \texttt{0} (cobrindo todos os IPs de
\texttt{128.0.0.0} a \texttt{191.255.255.255}). A \emph{netmask}
padrão nesse caso é \texttt{255.255.0.0} (16 bits). A classe B
possui $2^{15}$ redes, cada uma contendo $2^{16}-2$ endereços de
\emph{hosts} para as redes. Normalmente, os endreços B são usados
em corporações médias ou em governos. Além disso, os provedores de
\emph{backbone} de \emph{tier 2}. Algumas faculdades de porte
médio a nível mundial (como a UniCamp) também costumam usar
endereços de Classe B;
\item \textbf{Classe C:} é a classe mais usada de endereços. Seus
IPs são aquelas aonde os dois bits de maior ordem são \texttt{1} e
o bit de terceira maior ordem é \texttt{0} (cobrindo todos os IPs
de \texttt{192.0.0.0} a \texttt{223.255.255.255}). Tem como
\emph{netmask} padrão \texttt{255.255.255.0} (24 bits) e possui
$2^{22}$ redes disponíveis, com 254 \emph{hosts} por rede. É o
mais comum e é usado em geral por todo tipo de provedor de acesso
à Internet e pequenas empresas e instituições. Algumas vezes,
usuários caseiros podem ter eles próprios um ou mais IPs válidos
dentro dessa faixa;
\end{itemize}
Além dessas, existem duas outras classes de IP que não são usadas
normalmente, sendo reservadas para usos especiais:
\begin{itemize}
\item \textbf{Classe D:} Os endereços de Classe D começam com os
três primeiros bits de maior ordem com \texttt{1} e o quarto bit
de maior ordem em \texttt{0}. Eles são utilizados para
\emph{multicast}, sendo que o endereço indica um \emph{grupo de
\emph{hosts}} que irão receber a mensagem enviada. Perceba que
isso é diferente de \emph{broadcast}, pois no \emph{multicast} não
são todas as máquinas que irão receber a informação em questão.
Os IPs da Classe D são de \texttt{224.0.0.0} a
\texttt{239.255.255.255};
\item \textbf{Classe E:} Reservada para fins experimentais, tem os
quatro primeiros bits de maior ordem em \texttt{1}. No caso, os
IPs dessa faixa são de \texttt{240.0.0.0} a
\texttt{255.255.255.254}. O IP \texttt{255.255.255.255} é
reservado para \emph{broadcast} na rede do \emph{host};
\end{itemize}
\subsection{IPs privativos ou ``inválidos''}
Aparentemente existem muitos IPs em cada classe. Porém, existem muito
mais usuários na Internet. Para isso, criou-se várias técnicas, como o
uso de \emph{netmasks} que não fixam-se aos limites dos octetos do IP
(CIDR --- \emph{Classless Inter-Domain Routing} --- Roteamento
Interdomínio sem classes) e o uso de NAT (\emph{Network Address
Translation} --- Tradução de Endereços de Rede), de maneira a
aproveitar ao máximo os IPs disponíveis. Para facilitar isso, tomou-se
uma decisão aparentemente contrária ao objetivo delineado, que foi a
separação de faixas de IPs como de \emph{uso privativo} (também
chamados de IPs ``inválidos'').
Esses IPs são utilizados principalmente em combinação ao NAT. A idéia
é que a Internet enxergue apenas uma pequena quantidade de
\emph{hosts} de uma instituição (podendo ser até mesmo apenas um IP
por instituição), e dentro dela várias máquinas usando IPs privativos
façam a comunicação. No caso, fica a cargo de um computador chamado de
\emph{gateway} o uso do NAT, ou seja, a tradução da chamada de IP
interno para a de um IP externo. Esse repassa as requisições para a
Internet e gerencia o recebimento da informação externa de modo a
determinar quem solicitou o quê e para quem deve ir qual informação
recebida\footnote{Na prática a idéia é um pouco mais complexa, mas a
parte básica pode ser compreendida como demonstrada. O NAT utiliza, na
verdade, uma combinação das portas TCP com os endereços de IP para
criar a conectividade desejada}. O diagrama da Figura \ref{fig:nat},
na Página \pageref{fig:nat}, dá uma idéia de como funciona o NAT.
\begin{figure}
\begin{displaymath}
\xymatrix{
& & & & & & \texttt{host 1}(\texttt{10.0.0.1}) \\
& & & & & & \texttt{host 2}(\texttt{10.0.0.2}) \\
Internet & & & \ar@{<->}[lll]^{\txt{\texttt{200.0.5.72}}}
\txt{\emph{gateway}} \ar@{<->}[uurrr]\ar@{<->}[urrr]\ar@{<->}[rrr]\ar@{<->}[drrr]\ar@{<->}[ddrrr] & & & \texttt{host 3} (\texttt{10.0.0.3})\\
& & & & & & \texttt{host 4}(\texttt{10.0.0.4})\\
& & & & & & \texttt{\ldots}
}
\end{displaymath}
\caption{NAT e IPs privativos}
\label{fig:nat}
\end{figure}
Para permitir isso, a \emph{Internet Engeneering Task Force} criou a
idéia dos IPs privativos, normalizada na RFC 1918, ``\emph{Address
Allocation for Private Internets}''\cite{RFC1996}, aonde ela definiu
as faixas de IPs reservados como IP privativos, mostrado na Tabela
\ref{table:privateip}, na Página \pageref{table:privateip}. Na
prática, espera-se que roteadores da Internet não roteem tráfego de
IPs privativos, exceto se forem da rede à qual o roteador pertencem.
Também é importante isso como política de \emph{firewall} não permitir
que pacotes que proveiam da Internet mas que, por qualquer motivo,
tenha sido endereçado com IP privativos sejam roteados para dentro da
rede.
\begin{table}
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
{\centering \textbf{\textsc{Classe}}} & {\centering
\textbf{\textsc{Faixa de IP}}} & {\centering
\textbf{\textsc{Número de redes}}}\\
\hline\hline
A & 10.0.0.0 --- 10.255.255.255 & 1 \\
B & 172.16.0.0 --- 172.31.255.255 & 16 \\
C & 192.168.0.0 --- 192.168.255.255 & 256 \\
\hline
\end{tabular}
\caption{Tabela de IPs privativos}
\label{table:privateip}
\end{center}
\end{table}
Perceba que existe apenas uma rede privativa de Classe A, enquanto
existem 256 redes privativas de Classe C. Porém, perceba que \emph{na
realidade}, podemos ter tantas redes privativas de um determinado tipo
quanto desejarmos, desde que a isolemos atrás de um IP válido para a
Internet. Por exemplo, duas empresas podem usar redes privativas de
Classe A (\texttt{10.0.0.0}) normalmente, mas para se comunicar, devem
fazê-lo por meio de IPs válidos via Internet. Não é possível
comunicar-se diretamente com redes privativas isoladas diferentes da
originária do pacote, \emph{mesmo que o IP das duas sejam idênticas}.
Isso deve ser teoria suficiente para podermos seguir adiante em nossos
estudos. Se desejar, procure mais informações sobre TCP/IP na própria
Internet, ou consulte livros especializados, como ``TCP/IP
Illustrated, Volume 1 - The Protocols''\cite{STEVENS1999}, ou o
``Interligação em rede com TCP/IP volume 1''\cite{comer2001}.
Agora que já temos a teoria para formar base, vamos ao assunto em
questão, que é a configuração da rede TCP/IP em redes GNU/Linux.
\begin{quotation}
\textbf{Atenção:} Como já dissemos anteriormente, vamos apenas falar
aqui da parte relacionada à estrutura lógica ca da conectividade em
rede, e não da parte relacionada à parte física, como a carga de
módulos de \emph{kernel}, principalmente porque a maior parte das
distros GNU/Linux possuem recursos para auto-detecção de
\emph{hardware} em geral e de rede em particular. No caso, no
início desse capítulo foi colocado determinados recursos que você
pode consultar caso precise de mais informações nesse assunto em
especial.
\end{quotation}
\begin{quotation}
\textbf{Atenção:} Os comandos que serão vistos a seguir devem ser
usados como \texttt{root}, pois eles lidam com o funcionamento do
\emph{kernel} Linux. O mesmo vale para os arquivos de configuração
que serão mencionados.
\end{quotation}
\section{Conectando uma máquina a uma rede IP: os comandos
\texttt{ifconfig} e \texttt{route}}
Tudo tendo corrido bem na instalação da sua distro GNU/Linux, sua
placa de rede estará com seu \emph{driver} (ou, como é mais correto
dizer, \emph{módulo do kernel}) carregado. Portanto, sua
\emph{interface} de rede estará \emph{levantada} (carregada), mas ela
poderá \emph{não estar} habilitada para trabalhar em rede. Para poder
trabalhar em rede, será necessário definir um endereço de rede dentro
da rede em questão. Para isso, utilizamos o comando \texttt{ifconfig}
(\emph{interface configuration} --- configuração da Interface). Ele
permite configurar parâmetros diversos da interface de rede, entre
eles o endereçamento IP da sua placa.
\begin{quotation}
\textbf{Observação:} Para certos tipos de \emph{hardware}, certos
parâmetros devem ser configurados com outros comandos. Por exemplo,
para configurar informações como o ESSID, o canal de acesso ou a
senha WEP\footnote{\emph{Wireless Encryption Password} --- Senha de
Criptografia Sem-Fio} de uma placa de rede Wi-Fi (802.11) você irá
utilizar o comando \texttt{iwconfig}. Não trataremos desse assunto
aqui, mas documentação suficiente sobre esse assunto pode ser
encontrada na Internet, principalmente em documentos como o o
\emph{Linux Wireless HOWTO}\cite{WIRELESS2002}.
\end{quotation}
Como de costume, aconselhamos que se consulte a \emph{manpage} do
comando em caso de dúvidas. No caso, usamos a \emph{manpage}
\texttt{ifconfig(8)}.
\subsection{Explicando o comando \texttt{ifconfig}}
A sintaxe mais normal do \texttt{ifconfig} é:
\begin{center}
\begin{verbatim}
ifconfig <interface> [add|del] <address> hw <classe>
netmask <mascara> broadcast <broad> [up|down]
\end{verbatim}
\end{center}
A interface segue um nomeamento padronizado no GNU/Linux, no qual cada
interface começa com um prefixo específico do tipo de dispositivo em
questão e é completada por um número que indica sua ordem (começando
por \texttt{0}. Por exemplo, a primeira interface de rede Ethernet (a
mais tradicional) é indicado por \texttt{eth0}. A Tabela
\ref{table:netdevice}, na Página \pageref{table:netdevice} mostra
alguns prefixos comuns de dispositivos de rede.
\begin{table}
\begin{center}
\begin{tabular}{|c|c|}
\hline
{\centering \textbf{\textsc{Prefixo}}} & {\centering
\textbf{\textsc{Dispositivo}}}
\\
\hline\hline
\texttt{eth} & dispositivos de rede Ethernet\\
\texttt{wlan} & dispositivos Wi-Fi \\
\texttt{ppp} & dispositivos com conexão PPP (\emph{Point-to-Point Protocol}) \\
& Normalmente dispostivos de \emph{modems} \emph{dial-up} e ADSL\\
\hline
\end{tabular}
\caption{Prefixos de Dispositivos de Rede}
\label{table:netdevice}
\end{center}
\end{table}
As opções em seguida, \texttt{add} e \texttt{del}, permitem adicionar
ou remover um determinado endereço que o \emph{hardware} em questão
irá ``escutar''. Isso permite servidores com vários IPs em uma única
interface de rede, atráves de \emph{alias} (apelidos) para as
interfaces em questão. Não falaremos mais sobre esse assunto nesse
documento, mas uma pesquisa na Internet poderá revelar mais sobre o
assunto aos interessados.
A opção \texttt{hw} indica o tipo de \emph{hardware} que será usado.
Pode ser usada para alguns tipos de \emph {hardware} que exijam um
endereçamento físico fixo determinado pelo usuário, como redes Token
Ring ou redes em sistemas Dec ou AppleTalk. Para as redes comuns
Ethernet, isso não é necessário uma vez que:
\begin{enumerate}
\item O comando \texttt{ifconfig} consegue determinar
``automagicamente'' o tipo de \emph{hardware} em questão pelo
nome do dispositivo e;
\item Nas redes Ethernet, em geral o endereçamento físico é gravado
na própria placa, não sendo exigida intervenção do usuário.
\end{enumerate}
\begin{quotation}
\textbf{Atenção:} Um dos motivos pelos quais o comando
\texttt{ifconfig} só pode ser utilizado pelo \texttt{root} é o
fato de que é possível utilizar-se ele para adulterar o
endereçamento MAC\footnote{\emph{Media Access Control} ---
Controle de Acesso ao Meio} de uma placa de rede comum baseada em
Ethernet ou em redes que utilizem esse esquema de endereçamento
(como redes WiFi). Se esse endereço for adulterado, essa placa
passará a receber \emph{todos} os dados direcionados à máquina
cuja qual os dados foram enviados. Na prática, chama-se isso de
\emph{MAC hijacking} (seqüestro de MAC) e é utilizado para casos
aonde o atacante precisa clonar uma determinada máquina, como em
ataques do tipo \emph{man-in-the-middle} (homem do meio),
principalmente para o farejamento (\emph{sniffing}) ou para a
enganação (\emph{spoofing}) de redes, principalmente aquelas com
esquemas de segurança baseados no endereçamento MAC.
\end{quotation}
\texttt{netmask} é uma opção que permite configurar a máscara de rede
no esquema \emph{quad-dotted octets}. Se você utilizar CIDR ou então
trabalhar com as máscaras padrão da faixa do IP utilizado, essa opção
não é necessária.
\texttt{broadcast} permite estabelecer um endereço de \emph{broadcast}
que o sistema utilizará para mandar pacotes para a rede como um todo.
Essa opção é desnecessária se você fornecer um IP CIDR ou oferecer a
\emph{netmask} correta de sua rede, ``automagicamente'' gerando o
endereço para você.
As opções \texttt{up} e \texttt{down} ativam (``levantam'') ou
desativam (``derrubam'') a interface de rede em questão.
Mas configurar o IP pode não ser o suficiente, principalmente se for
necessário conectar o equipamento em questão à Internet. Nesse caso, é
necessário definir ao sistema como buscar uma conexão. Mais
exatamente, definir o \emph{gateway}\footnote{uma máquina ou
equipamento especial de rede que conecta uma determinada rede IP a
outra} por onde o sistema deve buscar sua conexão com a Internet. Para
isso, utiliza-se o comando \texttt{route}.
\subsection{Explicando o comando \texttt{route}}
O comando \texttt{route(8)} é um comando que permite que você manipule
a \emph{tabela de roteamento IP} do sistema. Essa tabela permite que
uma máquina, chamada \emph{gateway}, retransmita os dados de máquinas
de uma rede para as de outra rede (desde que essa máquina pertença às
duas \emph{ou} saiba como repassar os dados adiante). Sua sintaxe é
basicamente a seguinte:
\begin{center}
\begin{verbatim}
route [add|del] [-net|-host|default] <target> [gw GW]
[[dev] <if>]
\end{verbatim}
\end{center}
\texttt{add} e \texttt{del} funcionam como no caso de
\texttt{ifconfig}.
\texttt{-net} e \texttt{-host} permite indicar uma rota para uma
determinada rede ou \emph{host}. Para indicar a rota para qualquer
pacote que não seja local (ou seja, seja de outra rede), utilize
\texttt{default}. Nesse caso, \emph{não indique} o alvo
(\texttt{<target>}).
\texttt{gw} faz com que você indique qual a máquina que irá atuar como
\emph{gateway}. Pode receber tanto um IP quanto um nome de máquina.
\texttt{dev} permite que você indique qual interface de rede que
deverá ser usada para rotear os dados. Caso não seja indicado, o
sistema irá tentar determinar qual a interface a ser usada para rotear
os dados (na maioria dos casos com sucesso). Pode ser interessante
definir essa interface para algum ganho em desempenho, mas isso não
chega a ser obrigatório.
\subsection{Um exemplo de configuração de rede}
Vamos imaginar a seguinte rede de exemplo: no caso, o nome da rede
será \texttt{hogwarts}. As máquinas são \texttt{gryffindor},
\texttt{hufflepuff}, \texttt{ravenclaw} e \texttt{slytherin}. A rede
\texttt{hogwarts} usa o endereço de rede \texttt{10.0.0.0/8}, com
\emph{netmask} padrão Classe A (\texttt{255.0.0.0}). Elas se conectam
à Internet por meio da máquina \texttt{dumbledore}, que possui duas
interfaces de rede: uma com um IP ``normal'' para a rede em questão e
outra com um IP válido para a Internet, \texttt{200.126.15.2/24} (ou
seja, IP \texttt{200.126.15.2} e \emph{netmask}
\texttt{255.255.255.0}). A estrutura da rede em questão ficaria
similar à do diagram da Figura \ref{fig:nethogwarts}, na Página
\pageref{fig:nethogwarts}. Não consideraremos (ainda) coisas como NAT
ou \emph{firewalls}, deixando isso para mais adiante.
\begin{figure}
\includegraphics[scale=.5]{HogwartsNet}
\caption{Rede exemplo \texttt{hogwarts}}
\label{fig:nethogwarts}
\end{figure}
No caso, imaginemos que você está configurando inicialmente a máquina
\texttt{hufflepuff}. Como \texttt{root}, você deverá utilizar o
comando:
\begin{center}
\begin{verbatim}
ifconfig eth0 10.0.0.2 netmask 255.0.0.0 broadcast 10.0.0.255 up
\end{verbatim}
\end{center}
Perceba que falamos que ele utiliza o \emph{netmask} padrão para a sua
Classe IP. Além disso, em geral o \emph{broadcast} pode ser definido
conforme a necessidade pelo \texttt{ifconifg}. Nesse caso, se desejar,
você pode definir a interface com o seguinte comando.
\begin{center}
\begin{verbatim}
ifconfig eth0 10.0.0.2 up
\end{verbatim}
\end{center}
Além disso normalmente o \texttt{ifconfig} já conseguiria
automaticamente estabelecer um roteamento de rede normal. Se você
preferir, sempre pode-se usar \texttt{route} para estabelecer um
roteamento manual, sendo que isso é útil principalmente para pacotes
IPs para \emph{fora} da rede interna (por exemplo, para a Internet ou
para uma VPN\footnote{\emph{Virtual Private Network} -- Rede Privada
Virtual}). Por exemplo, imaginando que queremos estabelecer uma rota
padrão por \texttt{dumbledore} para \emph{todos} os pacotes da rede,
usamos o comando:
\begin{center}
\begin{verbatim}
route add default gw 10.0.0.254
\end{verbatim}
\end{center}
O próprio \texttt{route} se configura: o \emph{The Linux Network
Administrators' Guide, Second Edition}, de \citeonline{NAG2000}
explica que o \emph{kernel} do Linux checa a tabela de interfaces de
rede configuradas, de modo a rotear para uma interface configurada
para mandar os pacotes de um IP parte da mesma rede do \emph{gateway}
e define essa interface como a interface de saída dos dados.
\section{Arquivos de informações sobre redes}
Como você deve ter notado, trabalhamos muito com números de
IPs. Porém, embora IPs sejam fundamentais para o funcionamento de uma
rede, é muito difícil para uma pessoa comum decorar os IPs de uma
rede, exceto por redes pequenas e triviais, o que \emph{dificilmente}
é a realidade de um ambiente de redes tradicional, onde normalmente
temos uma grande quantidade de IPs para os mais diversos tipos de
recursos e máquinas, tanto \emph{hosts} quanto terminais. Por isso,
diversos esquemas de criar-se nomes simples de máquina foram
desenvolvidos com o tempo.
Embora existam esquemas como DNS\footnote{\emph{Domain Name Service}
-- Serviço de Nomes de Domínio} e DDNS\footnote{\emph{Dynamic DNS}
-- DNS dinâmico}(também conhecido como \emph{Bonjour}), em redes não
muito grandes, principalmente redes internas, pode-se adotar o esquema
tradicional por arquivos do Linux. Esse esquema envolve basicamente
quatro arquivos: \texttt{/etc/hosts}, \texttt{/etc/networks},
\texttt{/etc/HOSTNAME} e \texttt{/etc/resolv.conf}.
\subsection{\texttt{/etc/HOSTNAME}}
O arquivo \texttt{/etc/HOSTNAME} permite configurar-se o nome interno
da máquina. Isso é muito útil em alguns casos, mas nas versões mais
atuais do Linux o uso do \texttt{/etc/HOSTNAME} vem caindo por terra,
na realidade o \texttt{/etc/HOSTNAME} contem apenas uma linha, como no
caso do Trecho de Código \ref{fig:hostname}, na Página
\pageref{fig:hostname}. O primeiro nome é o nome simples da máquina,
acessável a todos os usuários da rede em questão, enquanto o segundo é
um FQDN\footnote{\emph{Fully Qualified Domain Name} -- Nome de Domínio
Totalmente Descrito} da máquina em questão. Normalmente ele seria
alguma coisa do tipo \texttt{www.google.com}, mas, principalmente em
máquinas em intranets, nada impede que se adote um FQDN como o
descrito anteriormente, ou seja, \texttt{hufflepuff.hogwarts}.
\begin{codigo}
\begin{center}
\begin{verbatim}
hufflepuff hufflepuff.hogwarts
\end{verbatim}
\caption{Exemplo de \texttt{/etc/HOSTNAME}}
\label{fig:hostname}
\end{center}
\end{codigo}
Nas versões mais atuais do \emph{kernel} do Linux, o arquivo
\texttt{/etc/HOSTNAME} acabou caindo por terra, sendo substituido por
uma combinação do comando \texttt{hostname} (para configuração em
\emph{runtime}) e do arquivo \texttt{/etc/hosts} (para configuração
persistente).
\subsection{\texttt{/etc/hosts}}
Na verdade, o \texttt{/etc/hosts} é o arquivo que contem as definições
dos nomes de \emph{hosts} de uma rede. Sua origem remonta a origem da
Internet, quando um arquivo \emph{hosts} era mantido pela
IANA\footnote{\emph{Internet Assigned Names and Addresses} -- Nomes e
Endereços distribuídos pela Internet: organização que mantêm a
distribuição dos IPs de uma rede} e redistribuído conforme era
atualizado na Internet. Com o tempo, esse esquema deu lugar a esquemas
como o DNS, mas sua utilidade para redes de porte pequeno a médio
continuou bastante válida.
O arquivo \texttt{/etc/hosts} é similar em funcionamento ao arquivo
\texttt{/etc/HOSTNAME}, mas com uma linha por IP. Além disso, cada IP
pode ter, além dos nomes de máquina e dos FQDN, um ou mais
\emph{alias} (apelidos) para as mesmas estabelecidos. Por exemplo, na
Trecho de Código \ref{fig:hosts}, Página \pageref{fig:hosts}, vemos a
lista de \emph{hosts} da Figura \ref{fig:nethogwarts}, Página
\pageref{fig:nethogwarts}. Além isso, cada domínio possui um ou mais
\emph{alias}, como o caso, por exemplo, de \texttt{supercomp}, que é
um \emph{alias} para \texttt{hufflepuff}.
\begin{codigo}
\begin{center}
\begin{verbatim}
127.0.0.1 localhost localhost.localdomain
10.0.0.1 gryffindor gryffindor.hogwarts security security.hogwarts
10.0.0.2 hufflepuff hufflepuff.hogwarts supercomp supercomp.hogwarts
10.0.0.3 ravenclaw ravenclaw.hogwarts data data.hogwarts
10.0.0.4 slytherin slytherin.hogwarts cert cert.hogwarts
10.0.0.254 dumbledore dumbledore.hogwarts proxy proxy.hogwarts
\end{verbatim}
\caption{Exemplo de \texttt{/etc/hosts}}
\label{fig:hosts}
\end{center}
\end{codigo}
Algumas instalações ou administradores preferem separar cada
\emph{alias} e FQDN por linha, repetindo o IP na primeira coluna do
arquivo. O Trecho de Código \ref{fig:hosts2}, Página
\pageref{fig:hosts2}, apresenta um exemplo de \texttt{/etc/hosts}
dividido por linha como o exemplo do Trecho de Código \ref{fig:hosts},
Página \pageref{fig:hosts}. Essa disposição é herança dos padrões
antigos do Unix\texttrademark, e continua sendo usado no Microsoft
Windows\texttrademark. A adoção desse padrão nos Unix mais modernos
no Linux fica a critério do administrador do sistema, conforme suas
necessidade. Pode-se inclusive usar uma versão separando os nomes de
máquinas e os de \emph{alias} Trecho de Código \ref{fig:hosts3},
Página \pageref{fig:hosts3}. O esquema a ser adotado fica a critério
do próprio desenvolvedor. De qualquer forma, uma sugestão é colocar
comentários (que começam com \texttt{\#}) explicando seu padrão.
\begin{codigo}
\begin{ttfamily}
127.0.0.1 localhost localhost.localdomain
10.0.0.1 gryffindor
10.0.0.1 gryffindor.hogwarts
10.0.0.1 security
10.0.0.1 security.hogwarts
\vdots
10.0.0.254 dumbledore
10.0.0.254 dumbledore.hogwarts
10.0.0.254 proxy
10.0.0.254 proxy.hogwarts
\end{ttfamily}
\begin{center}
\caption{Exemplo de \texttt{/etc/hosts} separado por linhas}
\label{fig:hosts2}
\end{center}
\end{codigo}
\begin{codigo}
\begin{center}
\begin{verbatim}
127.0.0.1 localhost localhost.localdomain
10.0.0.1 gryffindor gryffindor.hogwarts
10.0.0.1 security security.hogwarts
10.0.0.2 hufflepuff hufflepuff.hogwarts
10.0.0.2 supercomp supercomp.hogwarts
10.0.0.3 ravenclaw ravenclaw.hogwarts
10.0.0.3 data data.hogwarts
10.0.0.4 slytherin slytherin.hogwarts
10.0.0.4 cert cert.hogwarts
10.0.0.254 dumbledore dumbledore.hogwarts
10.0.0.254 proxy proxy.hogwarts
\end{verbatim}
\caption{Exemplo de \texttt{/etc/hosts} separando nomes de máquina e \emph{aliases}}
\label{fig:hosts3}
\end{center}
\end{codigo}
Perceba, por fim, que em \emph{todos} os exemplos, existe uma
definição para o \emph{localhost}. Isso é importante pois alguns
serviços, como a interface gráfica X, dependem de uma entrada
\emph{localhost} para localizar corretamente os servidores e dados na
máquina local. Nunca, \emph{jamais}, apague a definição do
\emph{localhost}, ou crie um \texttt{/etc/hosts} sem a mesma, pois
isso pode resultar em problemas de comportamento do sistema.
\subsection{\texttt{/etc/networks}}
\texttt{/etc/networks} auxilia a administração das redes às quais o
sistema pode acessar diretamente, assim como ao nomeamento de redes e
equipamentos. Seu principal uso é facilitar o uso do comando
\texttt{route}, ao desobrigar o administrador de decorar IPs de rede.
\begin{figure}
\includegraphics[angle=90,scale=.33]{HogwartsNet2}
\caption{Redes exemplo \texttt{hogwarts}, \texttt{durmstrang} e \texttt{beauxbatons}}
\label{fig:nethogwarts2}
\end{figure}
Vejamos agora um exemplo que nos auxilie a entender: imaginemos a rede
da Figura \ref{fig:nethogwarts} (Página \pageref{fig:nethogwarts}).
Agora, imaginemos que a rede \texttt{hogwarts} comece a prover
serviços para duas outras redes, \texttt{beauxbatons} e
\texttt{durmstrang}, conforme apresentado na Figura
\ref{fig:nethogwarts2} (Página \pageref{fig:nethogwarts2}). Como você
pode perceber, as máquinas \texttt{durmstrang} e \texttt{beauxbatons}
não possuem acesso via Internet direto, precisando passar pela rede
\texttt{hogwarts}. Para isso, é necessário fazer o roteamento dos
pacotes IPs de suas redes através da máquina
\texttt{dumbledore.hogwarts}. Para isso, tem que editar o arquivo
\texttt{/etc/networks} e configurar corretamente as redes. Em todos as
estações com roteamento (no caso \texttt{dumbledore.hogwarts},
\texttt{maxime.beauxbatons}, \texttt{karkaroff.durmstrang}) o arquivo
\texttt{/etc/network} deverá ser definido como no Trecho de Código
\ref{fig:network}, Página \pageref{fig:network}
\begin{codigo}
\begin{center}
\begin{verbatim}
hogwarts 10.0.0.0
beauxbatons 192.168.0.0
durmstrang 192.168.10.0
\end{verbatim}
\caption{Exemplo de \texttt{/etc/network} para a rede da Figura \ref{fig:nethogwarts2}}
\label{fig:network}
\end{center}
\end{codigo}
Bem, você deve estar perguntando \emph{``qual a diferença nisso
tudo??''}. Na verdade, da mesma forma que o arquivo
\texttt{/etc/hosts}, o \texttt{/etc/network} auxilia na configuração
de rede por comandos. No caso, ele facilita a configuração via
\texttt{route}. No caso, ambas as redes podem ser configuradas por
meio do comando \texttt{route add default gateway dumbledore.hogwarts}
e \texttt{route add -net beauxbatons}(por exemplo, na máquina
\texttt{fleur.beauxbatons}).
Na verdade, existem sempre os mecanismos de DNS que podem valer muito
mais a pena, mas esse sistema, para redes pequenas e médias deve ser
mais do que o suficiente.
\begin{codigo}
\begin{center}
\begin{verbatim}
127.0.0.1 localhost localhost.localdomain
10.0.0.1 gryffindor gryffindor.hogwarts
10.0.0.2 hufflepuff hufflepuff.hogwarts
10.0.0.3 ravenclaw ravenclaw.hogwarts
10.0.0.4 slytherin slytherin.hogwarts
10.0.0.254 dumbledore dumbledore.hogwarts
192.168.10.1 karkaroff karkaroff.durmstrang
192.168.10.2 krum krum.durmstrang
192.168.10.3 poliakoff poliakoff.durmstrang
192.168.0.1 maxime maxime.beauxbatons
192.168.0.2 fleur fleur.beauxbatons
192.168.0.3 gabrielle gabrielle.beauxbatons
\end{verbatim}
\caption{Exemplo de \texttt{/etc/hosts} para a rede da Figura \ref{fig:nethogwarts2}}
\label{fig:hosts4}
\end{center}
\end{codigo}
\begin{quotation}
\textbf{Nota:} como conselho, cada máquina conectada a um ambiente
como o da Figura \ref{fig:nethogwarts2}, deve ter um arquivo
\texttt{/etc/hosts} como o do Trecho de Código \ref{fig:hosts4}
(Página \pageref{fig:hosts4}), para que o mesmo consiga localizar
corretamente todas as máquinas.
\end{quotation}
\section{Arquivos de \emph{resolver}}
Uma parte importante das funcionalidades de rede do Linux involve o
\emph{resolver}. Esse componente interno ao \emph{kernel} do Linux
permite que o sistema resolva os nomes de máquina, ou seja, faça a
conversão do nome de máquina ou do FQDN para IPs.
Como foi dito, os nomes de máquina/\emph{alias}/FQDNs são apenas
formas de tornar ao usuário mais simples o acesso a máquinas ou
recursos da mesma. Para o computador, ele \emph{continua usando o
IP}. Esse entendimento ajuda a compreender a importância do
\emph{resolver}. Na prática, ele utiliza todos os mecanismos que o
\emph{kernel} conhecer para \emph{resolver o IP}, ou seja, pegar o
nome fornecido pela aplicação do usuário, ``traduzir'' esse nome para
um valor de IP que o sistema possa usar na transmissão via rede, e
usá-lo para conectar a máquina cliente ao \emph{host} com o serviço
desejado.
Para configurar como o \emph{resolver} do ambiente Linux irá se
comportar, são usados dois arquivos, o \texttt{/etc/host.conf} e o
\texttt{/etc/resolv.conf}.
\subsection{O arquivo \texttt{/etc/host.conf}}
O arquivo \texttt{/etc/host.conf} configura o comportamento do
\emph{resolver}. Em geral ele vai ter apenas algumas configurações,
sempre linha por linha.
A primeira opção é \texttt{order}, que configura a seqüência na qual o
\emph{resolver} tentará resolver o nome de máquina passado a ele. Os
valores dele são:
\begin{itemize}
\item \texttt{bind} --- esse parâmetro indica que o sistema irá
recorrer ao sistema de DNS para resolver o nome de máquina;
\item \texttt{hosts} --- esse parâmetro faz com que o sistema
utilize o esquema tradicional, que é através dos arquivos citados
anteriormente, como \texttt{/etc/hosts} e \texttt{/etc/network};
\item \texttt{nis} --- esse parâmetro permite que o sistema resolva
o nome de máquina pelo sistema de NIS (\emph{Network Information
Service} -- Serviço de Informação de Rede), um sistema
originalmente da Sun Microsystems que é muito usado em ambiente
exclusivamente Unix, como no caso de redes \emph{cluster}, por sua
simplicidade e leveza comparada com outros sistemas;
\end{itemize}
Essa opção não possui valor único, podendo ser inseridas todas essas
opções sem problemas. No caso, cada opção deve ser separada das demais
com uma vírgula, como no caso de \texttt{order bind, hosts}, e as
opções devem ser colocadas na seqüência de prioridade à qual o sistema
irá recorrer na resolução do nome. Nesse exemplo, o sistema irá
recorrer primeiro ao DNS e em seguida ao sistema tradicional de
arquivos do Unix.
Outra opção importante é \texttt{multi}, aonde o \emph{resolver}
responde à requisição do sistema recuperando \emph{todos} os valores
IP que ele puder resolver para o nome de máquina oferecido. Embora
isso ocasionalmente possa provocar conflitos, é muito interessante
manter em \texttt{on} permitindo, por exemplo, que no caso de mudança
de IP não aja problemas na resolução de um \emph{site}. Agora, no caso
de ambientes internos simples, pode ser interessante desativar essa
opção com \texttt{off}.
Uma opção de segurança na resolução de IP é \texttt{nospoof}. Ativando
essa opção em \texttt{on}, o sistema irá, após uma resolução
(principalmente para \emph{remote shell}, \texttt{telnet}, e
\emph{secure shell}) executá-la novamente. Se os valores de
\emph{ambas} as resoluções não casarem, isso significa uma tentativa
de \emph{spoof} por técnicas como \emph{DNS
poisoning}\footnote{\emph{DNS poisoning} é uma técnica que envolve a
substituição de valores DNS legítimos por valores falsificados, por
meio de substituições na seqüência em que os servidores são chamados,
literalmente ``envenenando'' o \emph{cache} de DNS do sistema} e
similares, o que o sistema irá automaticamente ``cortar''. Porém,
saiba que isso com certeza irá reduzir a performance do sistema, pois
ele deverá realizar \emph{duas} resoluções de nome \textbf{por
vez}. Portanto, use com cautela essa opção.
A opção anterior pode ter seu nível de segurança ampliado ainda mais
por meio de outra opção, que é a opção \texttt{spoofalert}, também com
valores \texttt{on} e \texttt{off}. No caso, se \emph{ambas} as opções
\texttt{nospoof} e \texttt{spoofalert} estiverem ativadas
(\texttt{on}), uma mensagem de erro do \emph{resolver} será enviada ao
\emph{syslog}, o registro de informações (\emph{log}) do sistema. Para
mais informações sobre o \emph{syslog}, consulte a Seção
\ref{sec:syslog}, na Página \pageref{sec:syslog}.
Isso deve ser o suficiente sobre \texttt{/etc/host.conf}. Um exemplo
desse arquivo pode ser encontrado no Trecho de Código
\ref{fig:hostsconf}, Página \pageref{fig:hostsconf}.
\begin{codigo}
\begin{center}
\begin{verbatim}
order hosts,bind
multi on
\end{verbatim}
\caption{Exemplo de \texttt{/etc/hosts.conf}}
\label{fig:hostsconf}
\end{center}
\end{codigo}