달력

5

« 2025/5 »

  • 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
2010. 4. 15. 14:05

[CentOS] 정책 라우팅 Linux/Cent OS2010. 4. 15. 14:05

두개의 네트워크 대역을 사용해야 하는 일이 있다.
물론 정책 라우팅을 사용했었다.
현재 내가 알고 있는 답은 정책 라우팅 밖에 없다.

그래서 시스템 설치 후 작업 내역을 보면 다음과 같다.

1. 인터페이스 설정 이다.

[root@server1 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.100.23
NETMASK=255.255.0.0
GATEWAY=172.16.2.33


[root@server1 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.20.20.201
NETMASK=255.255.255.0
GATEWAY=10.20.20.2

2. 커널 파라미터 변경작업

sysctl -w net.ipv4.conf.eth1.arp_filter=1
sysctl -w net.ipv4.conf.eth1.rp_filter=1
sysctl -w net.ipv4.conf.eth0.arp_filter=1
sysctl -w net.ipv4.conf.eth0.rp_filter=1
sysctl -w net.ipv4.conf.lo.arp_filter=1
sysctl -w net.ipv4.conf.lo.rp_filter=1
sysctl -w net.ipv4.conf.default.arp_filter=1
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.conf.all.arp_filter=1
sysctl -w net.ipv4.conf.all.rp_filter=1

위의 명령줄은 1회성이므로 다시 실제 파일에 넣어 준다.

sysctl -a | grep rp_filter >> /etc/sysctl.conf

적용완료 한 후 변경 값을 확인 한다.

[root@server1 network-scripts]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.arp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth0.arp_filter = 1
net.ipv4.conf.eth1.rp_filter = 1
net.ipv4.conf.eth1.arp_filter = 1
net.ipv4.conf.eth2.rp_filter = 1
net.ipv4.conf.eth2.arp_filter = 1
net.ipv4.conf.sit0.rp_filter = 1
net.ipv4.conf.sit0.arp_filter = 1

sysctl -a | grep rp_filter 명령어로 아래 모두 1인지 확인
 
net.ipv4.conf.eth1.arp_filter=1
net.ipv4.conf.eth1.rp_filter=1
net.ipv4.conf.eth0.arp_filter=1
net.ipv4.conf.eth0.rp_filter=1
net.ipv4.conf.lo.arp_filter=1
net.ipv4.conf.lo.rp_filter=1
net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.rp_filter=1



3.라우팅 정보와 룰셋을 추가한다.

ip rule add from 10.20.20.201 tab 1 priority 500
ip rule add from 172.16.100.23 tab 2 priority 500
ip route add default via 10.20.20.2 tab 1 dev eth1
ip route add default via 172.16.2.33 tab 2 dev eth0

추가 후 확인 명령은 다음과 같다.

[root@server1 network-scripts]# ip rule
0:      from all lookup local
500:    from 10.20.20.201 lookup 1
500:    from 172.16.100.23 lookup 2
32766:  from all lookup main
32767:  from all lookup default

[root@server1 network-scripts]# ip route
10.20.20.0/24 dev eth1  proto kernel  scope link  src 10.20.20.201
172.16.0.0/16 dev eth0  proto kernel  scope link  src 172.16.100.23
169.254.0.0/16 dev eth0  scope link  metric 1002
169.254.0.0/16 dev eth1  scope link  metric 1005
default via 172.16.2.33 dev eth0


물론 상기 명령으로 넣은 룰과 라우팅은 일회성이다.
즉 그말은 재부팅 하면 먹통이 된다는 이야기다.
하여 /etc/rc.local 파일에 내용을 추가 하여 리부팅시 마다 적용되게 한다.
4줄을 추가 하여 준다.

ip rule add from 10.20.20.201 tab 1 priority 500
ip rule add from 172.16.100.23 tab 2 priority 500
ip route add default via 10.20.20.2 tab 1 dev eth1
ip route add default via 172.16.2.33 tab 2 dev eth0


정책 라우팅이 잘되는지 확인 하는 방법은 다음과 같다.
traceroute로 실제 정책라우팅 적용 테스트
traceroute -s eth0의IP 163.126.63.1 -> .33 게이트웨이로 빠져나가는것 확인됨
traceroute -s eth1의IP 163.126.63.1 -> .2 게이트웨이로 빠져나가는것 확인됨

:
Posted by Se Story