it-swarm-korea.com

IP 앨리어싱시 OS는 아웃 바운드 TCP / IP 연결의 소스로 사용할 IP 주소를 어떻게 결정합니까?

단일 NIC에 별명을 가진 4 개의 IP 주소를 가진 Ubuntu Server를 실행하는 서버가 있습니다.

eth0       192.168.1.100
eth0:0     192.168.1.101
eth0:1     192.168.1.102
eth0:2     192.168.1.103

(예를 들어 192.168.x.x를 사용하는 경우 공용 IP 주소 범위에 NAT로 연결되어 있다고 가정)

클라이언트 중 하나가 FTP를 통해 인벤토리를 게시하므로 야간에 로그인하여 서버에서 큰 파일을 다운로드합니다. 그들의 방화벽은 우리의 (수동) FTP 연결이 192.168.1.100에서 이루어질 것으로 예상합니다.

서버에 단일 어댑터에 4 개의 IP 주소가 논리적으로 있다고 가정하면 운영 체제는 아웃 바운드 TCP/IP 연결의 소스로 사용되는 IP 주소를 어떻게 결정합니까?

192.168.1.101에서 서버로 ssh하고 대화식으로 FTP를 실행한다고 가정 해 봅시다. OS가 셸이 연결된 인터페이스임을 알고 있기 때문에 아웃 바운드 TCP/IP 연결에 192.168.1.101이 사용됩니까?

셸이없는 cron 작업을 통해 FTP 작업이 비 대화식으로 실행되면 어떻게됩니까?

당신이 아마 알 수 있듯이, 이것은 꽤 혼란 스러웠으므로 내 질문이 적어도 이해되기를 바랍니다.

편집

내가 묻는 이유를 명확히하기 위해-라우팅 테이블을 변경하지 않았으며 실제로 0.0.0.0 경로의 IFace로 'eth0'이 나열됩니다. 그러나 모든 표시는 실제로 소스로 eth0 : 0을 사용하고 있다는 것입니다.

Destination    Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0        192.168.1.1     0.0.0.0         UG    100    0        0 eth0

라우팅 테이블로 바이올린을 피우거나 클라이언트가 필요한 동작을 얻기 위해 방화벽 규칙을 변경하도록 할 수 있지만 OS에 버그가 있는지 또는 순진한 이해가 있는지 알 수 있도록 약간의 통찰력을 얻으려고합니다. 모든 조각들이 어떻게 들어 맞는지.

감사

15
Joe Holloway

기본적으로 Linux에서 인터페이스에 서로 다른 서브넷에있는 여러 개의 주소가있는 경우 각 서브넷으로 향하는 트래픽에는 적절한 소스 IP가 있습니다. 즉, eth0에 두 개의 주소 192.168.1.1/24 및 10.1.1.1/8이있는 경우 10.0.0.0 서브넷의 모든 트래픽은 소스 10.1.1.1이되고 192.168.1.0 서브넷의 모든 트래픽은 소스가됩니다. 192.168.1.1. 이 경우 "src 1.2.3.4"옵션을 사용하여 "ip route"에 소스 주소를 명시 적으로 할당 할 수도 있습니다.

그러나 귀하의 경우 모든 주소가 동일한 서브넷에 있으므로 "1 차"주소 ( "ip addr list dev eth0"로 표시됨)는 해당 인터페이스에서 트래픽이 나가는 소스 IP로 사용됩니다. 이 경우 "ip route"를 사용하여 소스 IP를 제어 할 수 있다고 생각하지만 iptables를 사용하여 관심있는 트래픽의 소스 주소를 다시 작성하는 것이 더 쉽다는 것을 알았습니다.

특정 소스 주소를 특정 대상에 사용하도록하려면 SNAT 규칙을 사용하여 수행 할 수 있습니다.

iptables -t nat -I POSTROUTING -o eth0 -d dest-IP-or-net/mask -s primary-IP-of-eth0 -j SNAT --to-source desired-source-IP

따라서 "기본"eth0 IP가 192.168.100.1이지만 1.2.3.4로가는 트래픽이 192.168.100.2의 소스를 가지려면 다음을 수행하십시오.

iptables -t nat -I POSTROUTING -o eth0 -d 1.2.3.4/0 -s 192.168.100.1 -j SNAT --to-source 192.168.100.2

"-s 192.168.100.1"은 중요합니다.이 규칙은 전달 된 트래픽의 소스 주소를 다시 쓰지 못하게합니다.

Linux에서 복잡한 네트워크 구성을 구현하려는 경우 Linux Advanced Routing and Traffic Control 문서 http://lartc.org 를 읽어야합니다.

12
user14017

귀하의 예에서 모든 IP가 동일한 네트워크에 있지 않기에는 너무 가깝습니다.

실제로 멀티 호밍을하고 있고 단순히 4 개의 IP 별명이없는 것이 확실합니까?

후자의 경우 다음과 비슷한 경로로 소스 IP를 설정할 수 있습니다

/ sbin/ip route show 192.168.222.0/24 dev eth0 프로토 커널 범위 링크 src 192.168.222.178 169.254.0.0/16 dev eth0 범위 링크 기본값은 192.168.222.1 dev eth0

Sudo/sbin/ip 경로는 192.168.222.1 src 192.168.222.178을 통해 기본값을 바꿉니다.

/ sbin/ip 라우트 쇼
192.168.222.0/24 dev eth0 프로토 커널 범위 링크 src 192.168.222.178 169.254.0.0/16 dev eth0 범위 링크 기본값은 192.168.222.1 dev eth0 src 192.168.222.178

재부팅 사이에 인터페이스를 유지하는 방법에 대한 man 인터페이스를 참조

5

다른 게이트웨이를 사용하도록 지시하는 특정 경로가없는 한, 라우팅 테이블에있는 기본 게이트웨이를 사용합니다. route -n

편집 : 나는 당신의 질문을 너무 빨리 읽은 것 같습니다 ...

수동 모드를 사용하고 클라이언트가 항상 연결을 시작하므로 IP 헤더의 src ip 필드는 항상 클라이언트가 연결된 IP로 나타납니다. 서버가 활성 모드 인 경우 연결을 시작하는 경우 항상 '기본'IP라고 생각합니다. 주소가 동일한 서브넷에있는 경우, Linux는 첫 번째 주소를 '기본'으로 추가하고 다른 주소는 보조로 만듭니다.

나는 완전히 확신하지 못하고, tcpdump -n을 실행하고 그것이 src IP로 보이는 것을 볼 것입니다.

EDIT2 : 좋아, 나는 서버를 실행하고 있다는 관점에서 위의 내용을 썼다. 그래서 당신은 클라이언트이고 연결을 시작하기 때문에 항상 기본 IP 주소에서 오는 것처럼 보일 것이라고 생각하지만 다시 시도하고보십시오. tcpdump로.

5
Kyle Brandt

FTP 작업에 연결에 사용할 인터페이스를 지정하는 방법이 없다면 기본적으로 관련 서브넷의 첫 번째 물리적 인터페이스 (이 경우 eth0)로 설정됩니다. 서로 다른 서브넷에 두 개의 NIC가있는 서버가있는 경우 라우팅 테이블을 기반으로 사용할 인터페이스를 파악합니다.

동일한 서브넷에 시스템에 단일 물리적 인터페이스 (eth0)와 4 개의 가상/별칭 (eth0 : 0 ~ eth0 : 2) 만 있으므로 아웃 바운드 트래픽은 응용 프로그램이 충분히 똑똑하지 않은 한 소스로 eth0 IP 주소를 사용합니다. 아웃 바운드 인터페이스를 선언합니다.

4
sysadmin1138

다음과 같이 ip route get 명령이 사용할 장치 및 src ip 주소를 확인할 수 있습니다.

$ /sbin/ip route get 1.1.1.1
1.1.1.1 via 2.2.2.2 dev eth0  src 2.2.2.2 
    cache  mtu 1500 advmss 1460 hoplimit 64

별칭 환경에서 시도하지 않았지만 이것이 도움이되기를 바랍니다.

4
tomoe

아웃 바운드 연결을 설정할 때 서버는 라우팅 테이블에서 네 가지 인터페이스 중 사용할 인터페이스를 결정합니다. TCP 연결에는 종료 인터페이스의 소스 IP가 있습니다.

netstat -rn

라우팅 테이블의 출력을 제공합니다. 연결하려는 클라이언트 IP와 일치하는 특정 항목을 찾으십시오. 존재하지 않는 경우 기본 경로 (0.0.0.0, 마스크 0.0.0.0)를 사용하게됩니다. 기본 경로가 여러 개인 경우 가장 저렴한 비용의 경로가 사용됩니다.

1
Murali Suriar