동일한 NIC에 있는 2개의 게이트웨이를 통해 소스 IP 주소 기반 라우팅

동일한 NIC에 있는 2개의 게이트웨이를 통해 소스 IP 주소 기반 라우팅

내 LAN에서 게이트웨이 역할을 하는 Linux 시스템에서 소스 IP 주소를 기반으로 트래픽을 라우팅하고 싶습니다.
2개의 네트워크 카드가 있고 이 카드 중 하나에는 2개의 서로 다른 기본 게이트웨이가 있습니다.

한 시스템에는 기본 게이트웨이가 하나만 있을 수 있으며 경로 선택은 대상 주소를 기반으로 한다는 것을 알고 있습니다.

IP 192.168.3.5가 있는 PC가 게이트웨이 172.16.62.254를 통해 액세스하고 연결할 수 있는지 확인하고 싶습니다.
eth0 뒤에는 인터넷에 액세스할 수 있는 VPN이 있습니다.

네트워크 인터페이스 설정은 다음과 같습니다.

DEVICE=eth0
TYPE=Ethernet
IPADDR=172.16.61.2
PREFIX=24
IPADDR2=172.16.61.3
PREFIX2=24
GATEWAY=172.16.61.1

DEVICE=eth0:1
TYPE=Ethernet
DEFROUTE=no
IPADDR=172.16.62.100
PREFIX=24
#GATEWAY=172.16.62.254

DEVICE=eth1
TYPE=Ethernet
IPADDR=192.168.3.1
NETMASK=255.255.255.0

라우팅 테이블은 다음과 같습니다.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.16.62.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.61.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         172.16.61.1     0.0.0.0         UG    0      0        0 eth0

두 게이트웨이의 IP 주소는 다음과 같습니다.

172.16.61.1
172.16.62.254

IP 주소가 있는 PC192.168.3.2GW에 도달해야 함172.16.61.1,
IP 주소가 있는 PC192.168.3.5GW 1에 도달해야 함72.16.62.254

2개의 게이트웨이에 대한 액세스를 허용하기 위해 iptables를 통해 IP 주소 변환을 수행합니다.

iptables -t nat -A POSTROUTING -s 192.168.3.2 -j SNAT --to-source 172.16.61.3  

그 반대

iptables -t nat -A PREROUTING -d 172.16.61.3 -j DNAT --to-destination 192.168.3.2  

게이트웨이 172.16.62.254를 통해 패킷을 라우팅하는 아이디어는 다음을 사용하는 것입니다.iptables소스 IP 주소가 192.168.3.5 또는 172.16.62.100인 패킷을 표시한 다음 다음 단계를 수행한 iproute2를 사용하여 라우팅합니다.

  1. ~ 안에/etc/iproute2/rt_tables라인을 추가했어요200 route254

  2. 패킷에 다음을 표시했습니다.

    iptables -t mangle -A OUTPUT -s 192.168.3.5 -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -s 172.16.62.100 -j MARK --set-mark 0x1

  3. 다음을 사용하여 라우팅을 구성했습니다.

    ip route add default via 172.16.62.254 dev eth0:1 table route254
    ip route add 172.16.62.0/24 dev eth0:1 src 172.16.62.100 table route254
    ip rule add from 172.16.62.100/32 table route254
    ip rule add to 172.16.62.100/32 table route254
    ip rule add prio 199 fwmark 0x1 lookup route254

내가 얻은 것은 주소가 192.168.3.2인 PC에 대한 연결 가능성은 작동하지만 PC는 외부에서 연결할 수 있지만 주소가 192.168.3.5인 PC는 작동하지 않는다는 것입니다.

주소가 192.168.3.2인 PC의 경우 tcpdump의 출력은 다음과 같습니다.

 18:38:31.317553 IP x.x.x.x.45053 > 172.16.61.3.ftp: S 3190836796:3190836796(0) win 5840 <mss 1380,sackOK,timestamp 2834368503 0,nop,wscale 7>  
 18:38:31.317832 IP x.x.x.x.45053 > 192.168.3.2.ftp: S 3190836796:3190836796(0) win 5840 <mss 1380,sackOK,timestamp 2834368503 0,nop,wscale 7>  
 18:38:31.317732 IP 192.168.3.2.ftp > x.x.x.x.45053: S 1998545683:1998545683(0) ack 3190836797 win 28960 <mss 1460,sackOK,timestamp 1123125 2834368503,nop,wscale 7>  
 18:38:31.317778 IP 172.16.61.3.ftp > x.x.x.x.45053: S 1998545683:1998545683(0) ack 3190836797 win 28960 <mss 1460,sackOK,timestamp 1123125 2834368503,nop,wscale 7>  
 18:38:31.368562 IP x.x.x.x.45053 > 172.16.61.3.ftp: . ack 1 win 46 <nop,nop,timestamp 2834368531 1123125>  
 18:38:31.368580 IP x.x.x.x.45053 > 192.168.3.2.ftp: . ack 1 win 46 <nop,nop,timestamp 2834368531 1123125>  
 18:38:33.257206 IP x.x.x.x.45053 > 172.16.61.3.ftp: P 1:3(2) ack 1 win 46 <nop,nop,timestamp 2834370444 1123125>

주소가 192.168.3.5인 PC의 경우 tcpdump의 출력은 다음과 같습니다.

 12:49:04.047809 IP x.x.x.x.60804 > 172.16.62.100.ftp: S 790746700:790746700(0) win 5840 <mss 1380,sackOK,timestamp 2986198269 0,nop,wscale 7>  
 12:49:04.048069 IP x.x.x.x.60804 > 192.168.3.5.ftp: S 790746700:790746700(0) win 5840 <mss 1380,sackOK,timestamp 2986198269 0,nop,wscale 7>  
 12:49:04.047884 IP 192.168.3.5.ftp > x.x.x.x.60804: S 3787612501:3787612501(0) ack 790746701 win 28960 <mss 1460,sackOK,timestamp 922143 2986198269,nop,wscale 7>  
 12:49:04.047909 IP 172.16.62.100.ftp > x.x.x.x.60804: S 3787612501:3787612501(0) ack 790746701 win 28960 <mss 1460,sackOK,timestamp 922143 2986198269,nop,wscale 7>  
 12:49:05.448336 IP 192.168.3.5.ftp > x.x.x.x.60804: S 3787612501:3787612501(0) ack 790746701 win 28960 <mss 1460,sackOK,timestamp 923544 2986198269,nop,wscale 7>  
 12:49:05.448351 IP 172.16.62.100.ftp > x.x.x.x.60804: S 3787612501:3787612501(0) ack 790746701 win 28960 <mss 1460,sackOK,timestamp 923544 2986198269,nop,wscale 7>  
 12:49:07.048100 IP x.x.x.x.60804 > 172.16.62.100.ftp: S 790746700:790746700(0) win 5840 <mss 1380,sackOK,timestamp 2986201269 0,nop,wscale 7>  
 12:49:07.048128 IP x.x.x.x.60804 > 192.168.3.5.ftp: S 790746700:790746700(0) win 5840 <mss 1380,sackOK,timestamp 2986201269 0,nop,wscale 7>  

패키지가 실제로 표시되었는지 확인하기 위해 다음을 사용했습니다.

iptables -A INPUT -m mark ! --mark 0 -m limit --limit 8/min --limit-burst 12 -j LOG --log-prefix "IPTables-Marks: "  

하지만 로그 파일에는 항목이 없습니다

IP 주소가 192.168.3.5인 PC가 게이트웨이 172.16.62.254를 통해 액세스하고 연결할 수 있도록 하려면 어떻게 해야 합니까?

관련 정보