브리지와 리눅스를 이용한 네트워크 연결

배철수 : 리눅스 월드 발행인

 

 

    여기에 소개하는 브리지를 이용한 네트워크 연결은 여러분이 집에서 케이블모뎀이나 ADSL로 인터넷을 연결하는 경우와 거의 동일하다.

    다음 페이지의 그림에서 “여의도”를 여러분의 집으로 보고 그 안의 브리지를 케이블모뎀으로 바꾸면 바로 집에서 케이블모뎀으로 인터넷을 사용하는 것과 같은 그림이다.

    단지 케이블모뎀으로 인터넷을 연결하는 경우 eth0에 부여되는 IP Address는 고정 ip가 아니고 DHCP 서버에서 연결하는 순간에 부여해 주는 변동 IP라는 점이다. 따라서 리눅스에 DHCP 클라이언트를 올려야 한다.

    브리지는 원래 과도한 트래픽으로 인한 패킷 충돌로 랜 속도가 감소할 때 이를 완화하기위해 사용하는 장비다.

    이더넷은 브로드캐스팅 방식이므로 한 개의 네트워크에 어느 한계 이상으로 노드(PC)가 증가할 때 패킷 충돌 현상이 급격히 증가하여 네트워크 속도가 현저히 감소하며 심지어는 네트워크가 다운되는 경우도 있다.

    이때 사용이 많은 그룹별로 브리지를 사용하여 네트워크를 분리하면 패킷 충돌 현상이 크게 줄어들어 네트워크 속도가 개선된다. 단 브리지는 설치 위치가 중요하다. 상호 간에 데이터 이동이 많은 그룹별로 나누어 중간에 브리지를 설치하면 불필요한 패킷이 브리지에서 차단되므로 속도가 증가한다.

    참고로 리눅스에도 브리지 셋팅이 가능하다. 리눅스에 랜카드를 여러 개 꼽아 커널에서 브리지로 셋팅할 수 있으나 아직 완벽하지 않다.

    브리지와 라우터의 차이는 라우터는 IP 어드레스로 경로를 찾으며 브리지는 MAC 어드레스(즉 이더넷 카드의 어드레스)로 경로를 찾는다는 것이다. 따라서 속도는 브리지가 빠르다. 그러나 브리지는 IP 어드레스란 개념을 모르므로 브리지 양쪽은 동일한 네트워크에 속해야한다.  네트워크가 다르면 라우터를 사용해야한다.

     

1. 브리지와 리눅스

    다음 페이지의 그림은 필자가 노량진에 위치한 레이넷(http://www.raynet.co.kr)과 여의도의 양지정보통신을 WAN 브리지와 128k 디지털 라인으로 연결한 네트워크 구성도이다.

    여기에 사용한 브리지는 국내 업체서 개발한 것으로 원격지의 두 네트워크를 최대 10메가 까지의 속도로 연결할 수 있는 WAN 브리지이다. 브리지에는 랜에 연결되는 10메가 10Base-T 이더넷 포트와 WAN에 연결되는 V.35(RS-232 겸용) 포트가 있다. 네트워크 연결을 위해서는 두 개의 브리지가 필요하다.

    네트워크를 구성해 본 독자는 여의도 쪽에 왜 리눅스 서버를 설치했는지를 이해할 것이다.

    리눅스가 없다면 여의도 쪽의 모든 PC에는 레이넷에서 갖고 있는 정식어드레스를 할당해 주어야 한다. 브리지는 IP 어드레스를 치환(NAT) 주는 기능이 없기 때문이다. 브리지는 오직 이더넷 어드레스만 인식 할 뿐 IP Address란 개념은 모르기 때문이다. 따라서 리눅스에 랜카드를 두 개 꼽아 첫 번째 랜카드(eth0)를 브리지에 연결하면 리눅스에는 정식 어드레스(210.126.21.21)가 할당된다. 다음에 리눅스의 두 번째 랜카드(eth1)에는 내부어드레스(192.168.1.9)를 할당하고 리눅스에 IP Masquerade 를 설정하면 여의도 쪽의 모든 PC는 리눅스의 정식 어드레스를 공유하여 인터넷을 사용 할 수 있다. 이때 여의도 쪽의 다른 PC는 물론 내부 어드레스인 192.168.1.X를 부여한다.
    즉, 여기서 리눅스 설치 목적은 IP 어드레스를 절약하기 위함이다. 물론 이 리눅스에는 웹서버, 메일서버, DNS 서버등의 기능도 들어간다.

    아래에 구체적인 작업 내용을 기록한다.

 

2. 리눅스 서버 사양은 아래와 같다.

    사용한 리눅스 배포본은 레드햇 6.0 영문(cheapbytes 제품)이고 PC는 펜티엄-3 450Mhz 이다.

    랜카드는
    ·3com 3c900(PCI) : eth0
    ·리얼텍 PCI(NE2000 호환) : eth1

     

3. 작업 순서

    3.1 커널 컴파일

    두개의 랜카드를 인식시키고 IP Masquerade 기능을 넣기 위해 커널을 컴파일 했다.
    ip masquerade 및 커널 컴파일에 대해서는 ‘99년 5월호의 각각의 기사를 참고하기 바란다.

    아래는 커널 컴파일 후 부트 메시지이다. 2개의 랜카드가 인식되었다.

      3c59x.c:v0.99H 11/17/98 Donald Becker
      http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html
      eth0: 3Com 3Com Boomerang (unknown version) at 0xe400,         00:10:5a:83:e3:e0, IRQ 11
      8K byte-wide RAM 5:3 Rx:Tx split, autoselect/
      Autonegotiate interface.
      MII transceiver found at address 24, status 1809.
      Enabling bus-master transmits and whole-frame receives.

      ne2k-pci.c:vpre-1.00e 5/27/99 D. Becker/P. Gortmaker
      http://cesdis.gsfc.nasa.gov/linux/drivers/ne2k-pci.html
      ne2k-pci.c: PCI NE2000 clone ‘RealTek RTL-8029’ at I/O 0xe800, IRQ 12.
      eth1: RealTek RTL-8029 found at 0xe800, IRQ 12, 00:00:1C:01:C2:54.

    3.2  IP 어드레스 설정

    첫번째 랜카드의 셋업 파일(/etc/sysconfig/network-scripts/ifcfg-eth0)은 아래와 같다.

      [root@linux network-scripts]# cat ifcfg-eth0
      DEVICE=eth0
      IPADDR=210.126.21.21
      NETMASK=255.255.255.0
      NETWORK=210.126.21.0
      BROADCAST=210.126.21.255
      ONBOOT=yes

    2번째 랜카드에 IP address를 할당해 주기 위해서는 같은 디렉토리에 ifcfg-eth1 파일을 만들어야한다.

      [root@linux network-scripts]# cat ifcfg-eth1
      DEVICE=eth1
      IPADDR=192.168.1.9
      NETMASK=255.255.255.0
      NETWORK=192.168.1.0
      BROADCAST=192.168.1.255
      ONBOOT=yes

    *. eth1의 주소를 일반적으로 사용하는 192.168.1.1이 아닌 192.168.1.9를 사용한 이유는 리눅스월드 사무실에서 테스트할 때 사무실에 이미 192.168.1.1 주소를 사용하고 있었기 때문이다.

    3.3 라우팅 테이블 설정

    라우팅 테이블을 설정하기 위해 /etc/sysconfig/network 파일을 아래처럼 수정한다.

      [root@linux sysconfig]# cat network
      NETWORKING=yes
      FORWARD_IPV4=true
      HOSTNAME=linux.linuxlab.co.kr
      DOMAINNAME=linuxlab.co.kr
      GATEWAY=210.126.21.253
      GATEWAYDEV=eth0

      1) FORWARD_IPV4=true 가 되야 IP masq가 작동한다.

      2) 브리지는 네트워크를 연장하는 개념이므로 리눅스 서버의
          디폴트게이트웨이는 레이넷의 ISP와 연결된 라우터의 이더넷 포트
          IP Address(210.126.21.253)이다.

      3) 게이트웨이 장치는 브리지와 연결된 랜카드(eth0)이다.

      [root@linux sysconfig]# ifconfig
      eth0            Link encap:Ethernet  HWaddr 00:10:5A:83:E3:E0
                      inet addr:210.126.21.21  Bcast:210.126.21.255                 Mask:255.255.255.0
                      UP BROADCAST RUNNING MULTICAST  MTU:1500        Metric:1
                      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:100
                      Interrupt:11 Base address:0xe400

      eth1          Link encap:Ethernet  HWaddr 00:00:1C:01:C2:54
                      inet addr:192.168.1.9  Bcast:192.168.1.255                 Mask:255.255.255.0
                      UP BROADCAST RUNNING MULTICAST  MTU:1500          Metric:1
                      RX packets:233 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:100
                      Interrupt:12 Base address:0xe800

      lo              Link encap:Local Loopback
                      inet addr:127.0.0.1  Mask:255.0.0.0
                      UP LOOPBACK RUNNING  MTU:3924  Metric:1
                      RX packets:30 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:0

    [root@linux sysconfig]# netstat -nr
    Kernel IP routing table
    Destination      Gateway       Genmask             Flags    MSS Window    irtt Iface
    192.168.1.9      0.0.0.0         255.255.255.255     UH         0 0                0 eth1
    210.126.21.21  0.0.0.0          255.255.255.255     UH        0 0     0          eth0
    210.126.21.0    0.0.0.0          255.255.255.0         U          0 0     0          eth0
    192.168.1.0      0.0.0.0         255.255.255.0          U          0 0     0          eth1
    127.0.0.0         0.0.0.0          255.0.0.0                U          0 0     0          lo
    0.0.0.0         210.126.21.253  0.0.0.0                   UG        0 0     0         eth0

    3.4 위는 설치 후 ifconfig 와 netstat -nr의 결과이다.

    3.5 IP masq를 설정하려면 /etc/rc.d/rc.local에 아래 라인을 추가한다.

      /sbin/ipchains -P forward DENY
      /sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ

    3.6 IP masq가 작동하는 것을 확인하려면 netstat -M을 준다.

    단 내부 랜에서 사용 중이어야 아래 결과가 나온다.

    아래는 윈95(192.168.1.10)에서 인터넷을 사용하고 있을 때의 결과이다. 168.126.63.1은 코넷 DNS 서버이고, 210.126.21.7은 레이넷 DNS 서버이다. 나머지 두 어드레스는 웹서버이다. (port 80은 www의 포트 번호이다)

      [root@linux bae]# netstat -Mn
      IP masquerading entries
      prot     expire source               destination         ports
      udp     4:29.98 192.168.1.10    168.126.63.1     137 -> 53 (61005)
      udp     0:17.57 192.168.1.10    168.126.63.1     1026 -> 53 (61000)
      udp     4:27.61 192.168.1.10    210.126.21.7     1038 -> 53 (61002)
      udp     4:28.17 192.168.1.10    210.126.21.7     1040 -> 53 (61003)
      tcp      1:30.00 192.168.1.10    164.124.96.132  1041 -> 80 (61006)
      tcp      1:28.71 192.168.1.10    208.147.89.193  1039 -> 80 (61004)

     

4. 마침

    브리지로 네트워크를 연결하면서 느낀점은 라우터 보다 속도가 빠르다는 것이다. 단지 객관적으로 증명하기는 힘들다. 라우터와는 달리 브리지에는 로긴을 할 수 없으므로(브리지는 IP address란 개념을 모른다) 두 브리지 사이에 ping 테스트를 할 수가 없기 때문이다.

    브리지에 login 을 할 수 없기 때문에 셋팅 과정에서 불편한 점이 많았다. 라우터의 경우는 로긴해서 시리얼 쪽의 상태를 파악할 수 있으나 브리지에서는 이 방법을 쓸 수가 없다. 그러나 브리지에는 LAN 쪽 및 WAN 쪽에 Link/RTS/CTS TX/RX 등의 인디케이터가 있어 이걸로 작동 여부를 파악할 수가 있다.

    또 하나 셋팅 과정에서 FDSU 때문에 애를 먹었다.
    브리지와 FDSU간의 신호가 잘 맞지 않아 한국통신에서 대여한 FDSU를 교체해서 연결에 성공했다.




▲ top

home으로...