• 참고 : 네트워크 실습은 현재 CentOS(레드햇 계열) 7에서 하고있음

1. 라우팅 테이블

0) 라우팅 테이블 확인하기

ip route show table <테이블>
  • 현재 설정된 라우팅 테이블을 볼 수 있음

1) 라우팅 테이블에서 특정 라우팅을 삭제하기

ip route del <>
  • 이 때 경로는 어떤걸 삭제할지가 확실해야 함
  • 예시 1. 192.168.10.0/24 에 관한 라우팅이 하나 뿐이면, 아래와 같이 쓰면 됨
ip route del 192.168.10.0/24
  • 예시 2. 192.168.10.0/24 에 관한 라우팅이 두개면 (다음 홉이 다름), 아래와 같이 쓰면 됨
ip route del 192.168.10.0/24 via 192.168.10.1 dev eth0
  • 여기서는 기본 라우팅을 삭제하고 테스트 해볼 예정임
ip route del default

  • default가 사라진걸 볼 수 있음

  • 이 상태에서 외부 ip로 접근하려고 하면 아마 안될것임. ping으로 테스트 해보면 아래의 결과가 나옴

  • 안되는게 정상임

2) 라우팅 테이블에 특정 라우팅을 추가하기

ip route add <>
  • 삭제와 비슷한데 del이 add가 됨

  • 당연한 얘기지만, 추가할 때에는 삭제할 때와 다르게 자세하게 조건을 써야 함

  • 여기서는 위에서 삭제한 기본 라우팅을 다시 복구해 볼 예정임

기본 라우팅 추가

ip route add default via 192.168.64.1 dev enp0s1

  • 아마 제대로 됐다면 외부 IP에 핑 날렸을 때 위와 같이 제대로 갈거임

특정 대역 라우팅 추가

  • 이번에는 default 말고 특정 대역에 대해 라우팅을 추가해 볼 것임
ip route add 20.20.0.0/16 via 192.168.0.1 dev enp0s1
  • 제대로 추가된 걸 볼 수 있음

  • 그리고 ip route get 을 사용하면 어떤 라우팅을 사용하는지 알 수 있음

  • 20.20.0.2 는 20.20.0.0/16 에 포함되기 때문에, 위에서 만들었던 20.20.0.0/16에 대한 라우팅에 포함되어 적용됨

라우팅 테이블 변경

  • 라우팅 테이블을 만들때, 특정 명령어는 따로 없음
  • 라우팅을 추가할 때 테이블을 지정한다면 그 때 추가된걸로 인지함
ip route add <> table <테이블번>
  • 예시
ip route add 8.8.8.8 via 192.169.64.254 dev enp0s1 table 100
  • 이 뒤에 ip route show table 100으로 확인해 보면…

  • 100번 테이블에 추가된 걸 볼 수 있음

3) 같은 목적지를 가진 여러 개의 라우팅을 metric으로 관리

ip route add <> meric <>
  • 여기서는 예시로 default 를 다음 홉과 비용을 다르게 만들었음
ip route add default via 192.168.64.254 dev enp0s1 metric 200
  • 잘 추가가 됨

  • 그러나 외부 IP로 통신을 시도하면 아까 전에 만든게 작동함.

  • 왜냐면 우리가 metric (200)으로 우선순위를 미뤄놨기 때문임

2. 라우팅 룰 (규칙)

0) 라우팅 룰 확인하기

  • 모든 규칙을 볼 때
ip rule show
  • 특정 테이블을 보라고 하는 규칙만 골라서 볼 때
ip rule show table <테이블_번>
  • 예시
ip rule show table main 
ip rule show table 100

1) 라우팅 룰 생성하기

ip rule add from <출발지_IP> lookup <테이블_번>
  • 예시
    • 여기서는 아까 위에서 만들었던 100번 테이블을 추가할 것
ip rule add from 192.168.64.254 lookup 100
  • 추가된 것을 볼 수 있음

  • 잠깐 현재 상황을 그림으로 표현해봄

  • 이 상태에서 8.8.8.8로 내 아이피로 보냄 vs 192.168.64.254 로 보냄 해보면

  • 내 아이피로 보내면 잘 가고, .254 로 하면 도착 안한다는걸 알 수 있음
  • 왜냐? 내 아이피로 보내면 일단 main table을 확인해서 보내기 때문임
  • .254를 from으로 하면 100 table을 확인하는데, 다음 홉을 192.168.64.254로 해놨음
  • 근데 .254가 지금 게이트웨이가 아니기 때문에 당연히 다음 홉으로 가봤자 8.8.8.8에 안닿음

2) 라우팅 룰 삭제하기

  • 라우팅 테이블에서 라우팅 지울 때랑 마찬가지임. 하나가 특정되게끔 확실하게 쓰면 됨
ip rule del <>
  • 예시
ip rule del from 192.168.64.254 lookup 100
  • 룰을 삭제한다고 해서 테이블 자체가 사라지지는 않는거긴 함
  • 테이블까지 완전히 지우려면 해당 테이블 안에 있는 라우팅을 다 지우면 됨
  • 다 지우고 깔끔하게 캐시까지 지우려면 아래의 명령을 실행
ip route flush cache

3. 설정을 영구로 저장하기

  • 기본적으로 ip route로 작성한 내용은 영구 저장이 아니고 이번 부팅 때만 사용됨
  • 영구적으로 저장하기 위해서는 파일을 수정해야 함

1) IP / 게이트웨이 설정

  • 설정 확인하기
cat /etc/sysconfig/network-scripts/ifcfg-<네트워크_인터페이스_이>

  • 혹시 모르니까 기존 ip랑 동일한 ip로 고정 설정을 해볼 예정

  • 현재 ip : 192.168.64.3

  • 게이트웨이 : 192.168.64.1

  • 설정 파일 밑에다가 아래의 내용 추가

IPADDR=192.168.64.3
PREFIX=24
GATEWAY=192.168.64.1
DNS1=8.8.8.8
  • 저장한 후의 아래 명령어 실행
nmcli connection reload
nmcli connection down <네트워크_인터페이스_이>
nmcli connection up <네트워크_인터페이스_이>
  • 예시
nmcli connection reload
nmcli connection down enp0s1
nmcli connection up enp0s1

2) 라우팅 테이블 설정

라우팅 테이블 이름 등록

  • 라우팅 테이블 alias (별명) 을 등록해주는 테이블

  • 위치 : /etc/iproute2/rt_tables

  • 예시 : 100 번 테이블을 table100 으로 저장

vi /etc/iproute2/rt_tables
...
100    table100
  • 저장하기

라우팅 테이블 작성

  • 위치 : /etc/sysconfig/network-scripts/route-<네트워크_인터페이스_이름>

  • 예시

vi /etc/sysconfig/network-scripts/route-enp0s1
default via 192.168.64.1 dev enp0s1 table table100 # 아까 만든 라우팅 테이블 별명에서 알아서 변환

라우팅 규칙

  • 위치 : /etc/sysconfig/network-scripts/rule-<네트워크_인터페이스_이름>

  • 예시

vi /etc/sysconfig/network-scripts/rule-enp0s1
from 192.168.64.10/32 table table100 priority 1000

적용

  • networkmanager를 재실행하면 됨
systemctl restart NetworkManager

4) 설정 점검

ip rule show
ip route show table table100
ip route get 8.8.8.8 from 192.168.64.10
  • 규칙 > 테이블 > 라우팅 순으로 확인

  • 나는 이대로 하니까 안됐음…

NetworkManager가 인터페이스를 못잡게 하는 법

  • 내 경우는 rule과 routing table이 싸그리 무시됐었음
  • Network Manager가 인터페이스를 잡고있는 경우에는 …/network-scripts 폴더에 rule-*, route-* 파일을 안읽는다고 함
  • /etc/sysconfig/network-scripts/ifcfg-<인터페이스_이름> 에다가 아래의 내용 추가
NM_CONTROLLED=no
  • 그리고 NetworkManager랑 network 서비스 재시작하면 해결됨