본문 바로가기

OS

Linux - sysctl 의 rp_filter

라우팅 프로토콜 시험 중이였는데, 한 쪽에서 트래픽을 쐈는데, 리눅스에서 패킷을 버리는 현상이 발생했다.


알고 봤더니 sysctl의 기능 중에 rp_filter 라는게 존재하는데, 커널버전 몇인가부터 디폴트로 활성화되어 있다고 한다.


rp_filter가 무슨 기능이냐면,


들어오는 패킷의 source IP가 리눅스의 라우팅 테이블에 등록되어 있지 않을 때 패킷을 버리는 역할이다.



필자의 시험에서 리눅스로 들어오는 패킷은 다음과 같았다.

src IP : 40.1.1.3

dst IP : 33.1.1.1


리눅스의 라우팅 테이블은 다음과 같았다.

root@RUT:~# ip route show
192.168.122.0/24 dev eth0  proto kernel  scope link  src 192.168.122.112 
33.1.1.0/24 via 30.1.1.3 dev eth5  proto zebra  metric 20 
33.1.2.0/24 via 30.1.1.3 dev eth5  proto zebra  metric 20 
33.1.3.0/24 via 30.1.1.3 dev eth5  proto zebra  metric 20 
33.1.4.0/24 via 30.1.1.3 dev eth5  proto zebra  metric 20 
33.1.5.0/24 via 30.1.1.3 dev eth5  proto zebra  metric 20 
30.1.1.0/24 dev eth5  proto kernel  scope link  src 30.1.1.2 
10.1.1.0/24 dev eth6  proto kernel  scope link  src 10.1.1.2 
default via 192.168.122.1 dev eth0  metric 100


즉, 33.1.1.0 패킷을 30.1.1.3으로 보내야 한다는 정보는 알고 있지만,

패킷의 src IP인 40.1.1.0에 대한 정보가 라우팅 테이블에 없기 때문에

default인 eth0로 들어오는 패킷이 아니면 버려지는 것이다.


여기서 패킷을 버리지 않으려면, 라우팅테이블에 40.1.1.0 대역에 대한 정보를 추가하거나,

sysctl 의 rp_filter 기능을 disable 시키면된다.


/etc/sysctl.conf 에서 수정이 가능하며,

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0


바로 적용 하려면 다음 명령을 사용하자.

sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0


혹시나 그래도 안된다면, 사용하는 인터페이스의 rp_filter 옵션도 disable 해주자.

sysctl -w net.ipv4.conf.eth5.rp_filter=0
sysctl -w net.ipv4.conf.eth6.rp_filter=0

'OS' 카테고리의 다른 글

Ubuntu - GUI 환경 설치  (0) 2016.09.01
Windows - FTP 배치파일  (0) 2016.09.01
Linux - ldconfig ldd  (0) 2016.09.01
Windows - 윈도우7 관리자권한 표시하기  (0) 2016.09.01
Ubuntu - 호스트네임 변경 및 적용  (0) 2016.09.01