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 범위)로 향하는 패킷용 b. 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

발견된 - 아니 오히려 재발견된 - 답...

문제는 호스트가 멀티 홈 서버에서 모든 종류의 arp 문제를 일으키는 포트가 아닌 네트워크 엔터티라고 믿는 Unix의 믿음입니다. 따라서 기본적으로 인터페이스의 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가 올바른 포트에서 응답하고 있습니다.

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

관련 정보