내 "CentOS 7 Minimal" 컴퓨터에는 2개의 네트워크 인터페이스가 있습니다. 요청이 인터페이스로 들어오면 동일한 인터페이스에서 응답이 전송되도록 정책 기반 라우팅을 설정해야 합니다. iproute2를 사용하여 비지속적 방식으로 이 작업을 수행하는 것은 그리 어렵지 않습니다.
echo '200 isp2' >> /etc/iproute2/rt_tables
ip route add default via 1.1.1.1 table isp2
ip rule add from 192.168.1.50 table isp2
그 중 1.1.1.1이 제 라우터이고, 192.168.1.50이 제 리눅스의 IP입니다. 문제는 이것을 계속 놔두는 것입니다.
내가 아는 한, iproute2 지속성 파일은 없습니다. 지속성을 유지하는 방법은 해당 파일을 네트워크 시작 스크립트에 추가하는 것입니다.
일반적으로 RedHat은 경로를 추가하기 위해 /etc/sysconfig/network-scripts/route-ethX 파일을 생성할 것을 권장하지만 이는 보조 라우팅 테이블에 경로를 추가하지 않는 것 같습니다.
해결책은 위의 "iproute" 및 "iprule" 행을 /etc/sysconfig/network에 추가하는 것 같습니다. 한 가지를 제외하고는 거의 작동합니다. 즉, 네트워크가 다시 시작될 때마다 한 번에 수십 개의 중복된 "ip 규칙" 규칙이 계속 추가됩니다.
"systemctl restart network"를 사용하여 네트워크를 2~3회 다시 시작한 후 내 ip rule
출력은 다음과 같습니다.
0: from all lookup local
32670: from 192.168.1.50 lookup isp2
32671: from 192.168.1.50 lookup isp2
...
32764: from 192.168.1.50 lookup isp2
32765: from 192.168.1.50 lookup isp2
32766: from all lookup main
32767: from all lookup default
CentOS 7에 지속적인 정책 기반 라우팅 규칙을 추가하는 올바른 방법은 무엇입니까?
추신. 예상한 대로 ip route list table isp2
명령은 단일 항목을 표시하므로 이는 문제가 되지 않습니다.
편집: RedHat 7 매뉴얼에 따르면:
Red Hat Enterprise Linux에서는 전역 /etc/sysconfig/network 파일이 더 이상 사용되지 않습니다.
이는 인터페이스별 프로필에 적합하며, 다른 라우팅 테이블에 경로를 추가할 수 없고 규칙을 추가할 수 없는 것처럼 보입니다 ip rule
.
답변1
NetworkManager-config-routing-rules를 설치하고 NetworkManager-dispatcher를 활성화하면 문제가 해결된 것 같습니다.
$ sudo yum install NetworkManager-config-routing-rules
$ sudo systemctl enable NetworkManager-dispatcher.service
$ sudo systemctl start NetworkManager-dispatcher.service
이제 이것을 /etc/sysconfig/network-scripts/route-ethX에 넣을 수 있습니다:
default via 1.1.1.1 table isp2
이것은 내 /etc/sysconfig/network/scripts/rule-ethX에 있습니다:
from 192.168.1.50 table isp2
그리고 내 /etc/iproute2/rt_tables에 있는 isp2의 정의는 다음과 같습니다.
200 isp2
네트워크 서비스를 다시 시작해도 더 이상 중복 항목이 생성되지 않습니다.
답변2
/etc/sysconfig/network-scripts/ifup-routes
행에서 읽는 것이 route-(interface)
있는 그대로 구문 분석된다는 점을 고려하면 ip route add
특정 테이블에 경로를 추가하려면 table XXX
해당 행에 추가하기만 하면 됩니다. 그러나 rt_tables
경로를 성공적으로 추가하려면 이름 대신 테이블 번호를 사용해야 할 수도 있습니다 .
rule-(interface)
규칙을 사용하면 파일과 파일의 실제 현재 버전을 사용 ifup-routes
하고 ifdown-routes
파일 라우팅처럼 처리할 수 있습니다. 이는 스크립트 세트에 해당되지 않을 수 있으므로 실행을 확인하십시오 grep rule /etc/sysconfig/network-scripts/ifup-routes
.
주요 문제는 실제로 /etc/sysconfig/network
각 ifup 및 ifdown 스크립트의 출처로 인해 발생하므로 파일의 각 명령은 각 인터페이스의 up/down마다 한 번씩 실행됩니다. 그러면 lo
네트워크가 다시 시작될 때마다 시스템이 2* 인터페이스(포함) IP 규칙을 추가하게 됩니다 .
추신: CentOS Network Manager를 제거하여 ifup/ifdown 스크립트를 통해 모든 작업을 수행했으며 이 답변을 게시하기 전에 모든 스크립트를 테스트했습니다.
답변3
네트워크 서비스를 다시 시작해도 더 이상 중복 항목이 생성되지 않습니다.
불행하게도 그렇지 않습니다. 수정하지 않고 네트워크 서비스를 다시 시작하지만 기존 규칙을 편집하는 경우, 예를 들어 다음과 같이 변경합니다.
from 10.1.2.0/23 table 300
이와 관련하여:
from 10.1.2.0/24 table 300
그런 다음 네트워크 서비스를 다시 시작하고 어떤 일이 발생하는지 확인합니다.
ip rule list table 300
32763: from 10.1.2.0/23 lookup 300
32764: from 10.1.2.0/24 lookup 300
32763: 10.1.2.0/23에서 조회 300과 같은 중복 규칙이 제거되어야 합니다.
추가: "rule-ifname" 파일의 모든 규칙을 주석 처리하거나 완전히 삭제하고 네트워크 서비스를 다시 시작하면 이전 규칙은 모두 그대로 유지됩니다.
아니요, 이것은 해결책이 아닙니다.