Ubuntu에서 공개 및 비공개 라우팅 설정

Ubuntu에서 공개 및 비공개 라우팅 설정

한동안 이것저것 찾아봐도 마땅한 답이 없는 것 같아서 책상에 머리를 부딪히며 며칠을 보내기 전에 물어봐야겠다는 생각이 들었습니다.

두 개의 물리적 인터페이스와 하나의 가상 인터페이스가 있는 Ubuntu 상자가 있습니다.

  eno1 - 172.16.0.100
  eno2 - 172.16.0.101
eno1:0 - x.x.x.x

내가 원하는 것

  1. 들어오는 패킷에 대한 응답의 경우 패킷이 요청된 인터페이스에서 패킷이 방출되기를 원합니다.
  2. 나가는 패킷의 경우 기본적으로 패킷을 내보내고 싶습니다.

    ㅏ. eno1 - 개인 네트워크(여러 개의 비연속 172.16.x.0 범위)로 향하는 패킷의 경우 eno1:0 - 다른 모든 네트워크로 향하는 패킷의 경우

현재 설정

IP 규칙 목록

0:  from all lookup local 
32760:  from all to x.x.x.x lookup eno1:0 
32761:  from x.x.x.x lookup eno1:0 
32762:  from all to 172.16.0.101 lookup eno2 
32763:  from 172.16.0.101 lookup eno2 
32764:  from all to 172.16.0.100 lookup eno1 
32765:  from 172.16.0.100 lookup eno1 
32766:  from all lookup main 
32767:  from all lookup default

IP 라우팅 목록 테이블 eno1:0

default via x.x.x.1 dev eno1 

IP 라우팅 목록 테이블 eno1

default via 172.16.0.1 dev eno1 
172.16.0.0/24 dev eno1  scope link  src 172.16.0.100 

IP 라우팅 테이블 eno2

default via 172.16.0.1 dev eno2 
172.16.0.0/24 dev eno2  scope link  src 172.16.0.101

IP 라우팅 목록

default via 172.16.0.1 dev eno1 onlink 
x.x.x.0/23 dev eno1  proto kernel  scope link  src x.x.x.x 
172.16.0.0/24 dev eno2  proto kernel  scope link  src 172.16.0.101 
172.16.0.0/24 dev eno1  proto kernel  scope link  src 172.16.0.100

eno1 및 eno2에 대한 sysctl 값

arp_filter=1
arp_ignore=1
arp_announce=2

질문

  1. 가끔 서브넷 외부에서 eno1과 eno2에 연결할 수 있지만 eno1:0에는 전혀 연결할 수 없습니다.
  2. 상자에서는 인터넷(공용 IP)에 전혀 액세스할 수 없습니다.

답변1

답은 발견되었습니다. 아니 오히려 재발견되었습니다…

문제는 Unix가 호스트를 포트가 아닌 네트워크 엔터티로 간주하므로 멀티홈 서버에서 모든 종류의 arp 문제가 발생한다는 것입니다. 따라서 기본적으로 인터페이스의 arp 응답을 해당 인터페이스와 연결된 IP 주소로 제한해야 합니다. 그렇지 않으면 Unix는 IP에 관계없이 모든 인터페이스에 응답합니다. 이는 실제로 서브넷의 다른 모든 장치를 혼란스럽게 합니다.

그래서... arptables 설치

sudo apt-get -y install arptables

각 인터페이스의 응답을 해당 인터페이스의 IP로 제한합니다.

sudo arptables -n -v --line-numbers -L
Chain INPUT (policy DROP 6011K packets, 168M bytes)
1 -j ACCEPT -i eno1 -o * -d x.x.x.x , pcnt=2496 -- bcnt=69888 
2 -j ACCEPT -i eno1 -o * -d 172.16.0.100 , pcnt=294 -- bcnt=8232 
3 -j ACCEPT -i eno2 -o * -d 172.16.0.101 , pcnt=294 -- bcnt=8232 

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
1 -j ACCEPT -i * -o eno1 -s x.x.x.x , pcnt=2503 -- bcnt=70084 
2 -j ACCEPT -i * -o eno1 -s 172.16.0.100 , pcnt=295 -- bcnt=8260 
3 -j ACCEPT -i * -o eno2 -s 172.16.0.101 , pcnt=294 -- bcnt=8232 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

보라, 모든 IP는 올바른 포트에서 응답합니다.

남성! 다시는 이 일을 잊지 않았으면 좋겠습니다!

관련 정보