2019/12/09

라우팅 테이블

리눅스 기본 명령어 route를 통한 게이트웨이 설정및 라우팅 설정.

route 명령은 기본적으로 커널 라우팅 테이블 항목의 세부 사항을 표시한다.
ARP 프로토콜을 통해 대상의 MAC 주소가 발견되고 패킷이 MAC 주소로 전송된다.

네트워크 IP 범위 내에 있지 않은 대상으로 패킷을 보내려면 패킷이 기본 게이트웨이로 전달되어 해당 패킷에 대한 추가 라우팅을 결정한다.
$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.16.1.1      0.0.0.0         UG    0      0        0 eth0
10.10.10.0      *               255.255.255.0   U     0      0        0 eth1
172.16.1.0      *               255.255.255.0   U     0      0        0 eth0
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0

기본적으로 route 명령은 출력에 호스트 이름을 표시
$ route -n
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.1.1      0.0.0.0         UG    0      0        0 eth0
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

기본 게이트 웨이 추가.
$ route add default gw 192.168.1.10

커널 라이팅 캐시 정보 나열
$ route -Cn

특정 호스트 또는 네트워크에 대한 라우팅 거부
호스트 라우팅 거부
$ route add -host 192.168.1.51 reject
$ ping 192.168.1.51
connect: Network is unreachable

네트워크 라우팅 거부
$ route add -net 192.168.1.0 netmask 255.255.255.0 reject
$ ping 192.168.1.51
connect: Network is unreachable

$ ping 192.168.1.52
connect: Network is unreachable

$ ping 192.168.1.53
connect: Network is unreachable

192.168.1.0 과 192.168.3.0 통신 설정.
192.168.1.0 기본 게이트웨이 추가
$ route add default gw 192.168.1.10

게이트웨이 다음 라우팅 항목 추가.
$ route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.10

192.168.3.0 기본 게이트웨이 추가.
$ route add default gw 192.168.3.10

게이트웨이에 다음 라우팅 항목 추가.
$ route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.10

서로 다른 네트워크 연결 성공.

외부 테트워크 활성화
$ route add default gw 외부 게이트웨이 주소.

1. 우분투 router package 설치
1.1 nat 활성화.
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 ---> 변경. 1 = yes, 0 = no

1.2 동적 라이팅 설치.
# sudo apt-get install quagga

1.2.1 설정
cd /etc/quagga

vi zebra.conf
  hostname Router
  password zebra   (사용자 암호 설정)
  enable password zebra  (사용자 암호 설정)

vi ripd.conf
  hostname ripd
  password zebra (사용자 암호 설정)

1.2.3 deamons 파일 내용 변경
zebra 부분과 ripd 부분을 yes로 수정

1.2.4 /etc/services 파일의 내용을 확인
zebra, ripd 포트 번호 확인.

2. quagga 및 rip 실행
sudo /etc/init.d/quagga start | restart | stop
or
sudo service zebra start

rip daemon 실행.
service ripd start

3. quagga 접속 운영.
3.1 telnetl 접속
sudo telnet localhost 2601
or
telnet localhost zebra

router> enable
Router# configure terminal
Router(config)# interface eth0   
Router(config-if)# ip address 192.168.1.1/24
Router(config-if)# exit
Router(config)# interface eth1   
Router(config-if)# ip address 192.168.3.1/24
Router(config-if)# end
Router# write memory
Configuration saved to /etc/quagga/zebra.conf
Router# show running-config

....

Router# quit

3.2 설정 확인.
/etc/quagga/zebra.conf CLI 설정 내용과 유사한지 확인.
192.168.1.1/24과 192.168.3.1/24은 실제 eth0 및 eth1의 IP 주소이므로 네트워크 장치에 가서 이에 맞도록 IP 주소 변경.

4. rip daemon 접속 및 운용.
4.1 telnet 접속
sudo telnet localhost 2602
or
telnet localhost ripd

ripd> enable
ripd# configure terminal
ripd(config)# router rip
ripd(config-router)# network 192.168.1.0/24
ripd(config-router)# network 192.168.3.0/24
ripd(config-router)# end
Router# write memory
Configuration saved to /etc/quagga/ripd.conf
Router# show running-config
....
Router# quit

4.2 설정 파일 확인.
/etc/quagga/ripd.conf CLI 설정 내용과 유사한지 확인.

5. static router 설정
static route를 설정한 후 show ip route로 설정 상황을 확인한다.
(C는 directly connected, S는 static route를 의미함)

Router> enable
Router# configure terminal
Router(config)#  ip route 192.168.1.100 255.255.255.0 eth0
Router(config)# ip route 192.168.3.100 255.255.255.0 eth1
Router(config)# end
Router# show ip route
C   192.168. ....
....
S   192.168. ....
....
Router# write memory
Configuration saved to /etc/quagga/zebra.conf
Router# show running-config
....
Router# quit

6. static 라우터 명령어
Router(config)# ip route network [mask] {address | interface} [distance] [permanent]
network : 목적지 네트워크
mask : 목적지 네트워크의 subnet mask
address : 목적지 네트워크에 도달하기 위한 next-hop address
interface : 목적지 네트워크에 도달하기 위한 next-hop router의 local interface
distance : route의 AD (Administrative Distance) value
permanent : 정의된 static route가 table에서 삭제되지 않도록 함

AD (Administrative Distance) value 변경 명령어
Router(config)# router rip
Router(config-router)# distance [1-255 distance]

router A에서 static route를 설정한 예는 다음과 같다.
Router(config)# ip route 150.150.0.0   255.255.0.0   203.210.100.1
150.150.0.0과 255.255.0.0은 destination network 주소 및 subnet mask
203.210.100.1은 1 hop을 건너뛴 IP address (즉, router B의 serial interface에 대한 IP address를 의미)
명령어 맨 뒤에 distance (라우팅 value, 작을수록 high)를 입력 가능 (default는 1)

rip 관련 timer 주기 설정 명령어
Router(config)# router rip
Router(config-router)# timers basic 5 30 30 40 1

숫자 순서대로 update, invalid, holddown, flush, sleep timer임
sleep timer는 최소 1ms임

default timer value는 다음과 같다.
­ hello time (정기 알림 간격) 30초
­ invalid time (경로 만료 시간) 180초
­ holddown time은 invalid timer 종료 후 180초
­ flush time (경로 제거 시간)은 240초
­ sleep time (route poisoning 수신 시 긴급 update 시간)은 0초

18.04 NAT 설정.
================
1. 네트워크 설정.
우분투 라우드 버전으로 설치 했을 경우 네트워크 인터페이스 파일 수정
sudo vi /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            dhcp4: true
        eth1:
            addresses:
            - 192.168.1.1/24
            dhcp4: false
            nameservers:
                addresses:
                - 8.8.8.8
                - 8.8.4.4
                search: []
    version: 2

구성 설정 적용
sudo netplan generate
sudo netplan apply

2. dhcp 서버 설정
sudo apt-get install isc-dhcp-server

sudo vi /etc/default/isc-dhcp-server
INTERFACESv4="eth1"

sudo vi /etc/dhcp/dhcpd.conf
option domain-name "whatever.you.want";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
     range 192.168.1.101 192.168.1.200;
     option subnet-mask 255.255.255.0;
     option routers 192.168.1.1;
     option broadcast-address 192.168.1.255;
}

sudo systemctl restart isc-dhcp-server
sudo systemctl enable isc-dhcp-server

sudo systemctl status isc-dhcp-server

3. 방화벽 설정
sudo ufw enable

sudo vi /etc/ufw/sysctl.conf
net/ipv4/ip_forward=1

sudo vi /etc/rc.local
#!/bin/bash

# /etc/rc.local

# 들어오는 모든 패킷을 삭제하는 기본 정책
iptables -P INPUT DROP
iptables -P FORWARD DROP

# localhost 및 LAN 인터페이스에서 들어오는 패킷을 수락한다.
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT

# 라우터 연결을 시작한 경우 WAN에서 들어오는 패킷을 수락한다.
iptables -A INPUT -i eth0 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT

# LAN 패킷을 WAN으로 전달한다.
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

# LAN이 연결을 시작한 경우 WAN 패킷을 LAN으로 전달한다.
iptables -A FORWARD -i eth0 -o eth1 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT

# NAT 트래픽이 WAN 인터페이스로 전송된다.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# rc.local 종료
exit 0

실행 권한.
sudo chmod 755 /etc/rc.local

18.04 Quagga
=============
sudo apt install quagga

버전 1.2.4 및 해당 패키지를 설치
quagga quagga-bgpd quagga-core quagga-isisd quagga-ospf6d quagga-ospfd quagga-pimd quagga-ripd quagga-ripngd.

서비스 구성
/etc/systemd/system/multi-user.target.wants/

사용자 추가 및 그룹 추가
quagga 및 quagga 그룹, quaggatvy 생성 됨.

설명서 설치
sudo apt install quagga-doc

패킷 전달 활성화
vi /etc/sysctl.conf
net.ipv4.ip_forward=1

샘플 파일 복사 및 소유권 변경 및 환경에 맞게 구성.
cp /usr/share/doc/quagga-core/examples/vtysh.conf.sample /etc/quagga/vtysh.conf
cp /usr/share/doc/quagga-core/examples/zebra.conf.sample /etc/quagga/zebra.conf
cp /usr/share/doc/quagga-core/examples/bgpd.conf.sample /etc/quagga/bgpd.conf
sudo chown quagga:quagga /etc/quagga/*.conf
sudo chown quagga:quaggavty /etc/quagga/vtysh.conf
sudo chmod 640 /etc/quagga/*.conf

필요한 서비스를 실행
sudo service zebra start
sudo service zebra status
sudo service bgpd start
sudo service bgpd status


시스템 시작시 서비스가 시작되는지 확인
sudo systemctl is-enabled zebra.service
sudo systemctl is-enabled bgpd.service
sudo systemctl enable zebra.service
sudo systemctl enable bgpd.service

vtysh, bgpd 및 zebra 터미널에 연결
sudo vtysh
sudo telnet localhost 2605
sudo telnet localhost 2601

댓글 없음:

댓글 쓰기