Linux의 단일 인터페이스에 있는 여러 IP 소스

Linux의 단일 인터페이스에 있는 여러 IP 소스

예를 들어 NetworkManager를 사용하여 단일 인터페이스에 여러 IP 주소를 설정할 수 있습니다.

다중 IP

다른 IP를 사용하여 외부 PC에 어떻게 연결하나요?

예를 들어, IP 주소가 8개( 10.7.4.x, 10.7.4.x+1, 10.7.4.x+2, ...)이고 다른 IP를 사용하여 각 대상 주소에 연결하려는 경우 임의 IP 또는 순차 모드(대상 IP 모드 8 = 0인 경우, 그런 다음 을 사용하고 x, 대상 모드 8 = 1일 때 을 사용하고 x+1, 등등)

답변1

Linux에서는 나가는 연결에 대한 소스 주소 선택을 라우팅 테이블을 통해 제어할 수 있습니다.

ip route add 10.11.12.0/24 via 10.7.4.1 src 10.7.4.200

특정 고정 IP 범위에 대해 다른 소스 주소만 사용해야 하는 경우에는 이 방법으로 충분합니다. 그러나 Linux 넷필터( )와 정책 라우팅( ) iptables의 기능을 결합하면 ip rule소스 주소를 동적으로 선택할 수 있습니다.

기본 프로세스는 다음과 같습니다.

  1. PREROUTING체인의 패킷에 적절한 태그를 설정합니다 mangle.
  2. 서로 다른 태그( )가 있는 패킷에는 서로 다른 IP 라우팅 테이블을 사용합니다 ip rule add fwmark X table Y.
  3. 각 라우팅 테이블의 src패킷에 필요한 주소를 사용합니다.

"mod 4"로 설정된 대상 IP를 기반으로 패킷을 표시하기 위한 넷필터 설정은 다음과 같습니다.

iptables -A PREROUTING  -t mangle -j CONNMARK --restore-mark
iptables -A PREROUTING  -t mangle -m mark --mark 0x0 -d 0.0.0.0/0.0.0.3 \
  -j MARK --set-mark 1
iptables -A PREROUTING  -t mangle -m mark --mark 0x0 -d 0.0.0.1/0.0.0.3 \
  -j MARK --set-mark 2
iptables -A PREROUTING  -t mangle -m mark --mark 0x0 -d 0.0.0.2/0.0.0.3 \
  -j MARK --set-mark 3
iptables -A PREROUTING  -t mangle -m mark --mark 0x0 -d 0.0.0.3/0.0.0.3 \
  -j MARK --set-mark 4
iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark

CONNMARK(이 특별한 경우 에는 다른 표시 명령이 동일한 연결의 모든 패킷에 대해 동일한 결과를 제공하므로 두 명령을 모두 생략할 수 있습니다 . 그러나 소스 주소의 순환 사용과 같은 보다 복잡한 경우에는 이러한 명령이 필요합니다. 연결의 모든 패킷이 동일한 경로를 사용하는지 확인하십시오.

IP 라우팅 설정은 다음과 같습니다.

ip route add default via 10.7.4.1 src 10.7.4.200 table 1
ip route add default via 10.7.4.1 src 10.7.4.201 table 2
ip route add default via 10.7.4.1 src 10.7.4.202 table 3
ip route add default via 10.7.4.1 src 10.7.4.203 table 4

ip rule add fwmark 1 pref 1 table 1
ip rule add fwmark 2 pref 2 table 2
ip rule add fwmark 3 pref 3 table 3
ip rule add fwmark 4 pref 4 table 4

답변2

나가는 연결을 설정하는 데 사용되는 애플리케이션이나 도구는 가능한 소스 IP 주소가 여러 개 있다는 것을 이해하고 필요한 모든 주소에 명시적으로 바인딩해야 합니다.

예를 들어 sshpass 옵션에는 이 기능이 있으므로 -b이렇게 하면 ssh -b 10.7.4.201 ...해당 주소가 소스 주소로 사용됩니다.

예를 들어 라운드 로빈 방식으로 가능한 소스 주소를 자동으로 사용하는 것은 불가능합니다.

-b 플래그는 무엇입니까?

-b bind_address
         Use bind_address on the local machine as the source address of
         the connection.  Only useful on systems with more than one
         address.

관련 정보