답변:
echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> dev <interface> table isp2
ip route add default via <gateway_IP> dev <interface> table isp2
위의 ipfilter로 패킷 마킹이 필요하지 않습니다. 나가는 (응답) 패킷에는 원래 나가는 패킷의 소스 (보낸 사람) 주소로 두 번째 인터페이스에 연결하는 데 사용 된 IP 주소가 있기 때문에 작동합니다.
dev
매개 변수를 생략했을 때만 작동 ip rule
하므로 다음을 실행하십시오.ip rule add from <interface_IP> table isp2
up ip rule add from <interface_IP> table isp2
와 up ip route add default via <gateway_IP> dev ppp0 table isp2
관련 인터페이스에서 당신을 / etc / 네트워크 / 인터페이스.
dev <interface>
에서 ip rule
내 상자에 작동하도록 할 수 있습니다. 내가 올바르게 이해하고 있다면 dev <interface>
, 재정의 된 경로로 올바른 인터페이스로 넘어 가야 하는 잘못된 인터페이스에 설정된 패킷을 필터링했지만 인터페이스에 의한 규칙 필터링으로 인해 패킷이 발생하는 것을 막고있었습니다.
dev <interface>
에서 제거 ip rule
해야했습니다. 답변을 업데이트하십시오! 그 세부 사항을 제외하고는 매력처럼 작동했습니다. 감사합니다, @Peter!
다음 명령 eth1
은 마크가 1 인 패킷 (로컬 호스트에 대한 패킷 제외)을 통해 대체 라우팅 테이블을 만듭니다 . ip
명령은에서입니다 iproute2를의 스위트 (우분투 : iproute iproute http://bit.ly/software-small 설치 , iproute-문서 설치 iproute-문서 http://bit.ly/software-small을 ).
ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth1
작업의 나머지 절반은 마크 1을 가져와야하는 패킷을 인식하고 있습니다. 그런 다음 iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
이 패킷을 사용 하여 라우팅 테이블 1을 통해 라우팅되도록하십시오. 나는 다음을 수행해야한다고 생각합니다 (기본 경로가 아닌 인터페이스의 주소로 1.2.3.4를 대체하십시오).
iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1
그것이 충분한 지 확실하지 않습니다. 아마도 수신 패킷에 다른 규칙이 있어야 conntrack 모듈이 그들을 추적하도록 할 수 있습니다.
Peter가 제안한 솔루션으로 로컬로 생성 된 패킷에 문제가 있었지만 다음과 같이 수정되었습니다.
echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 priority 900
ip rule add from dev <interface> table isp2 priority 1000
ip route add default via <gateway_IP> dev <interface> table isp2
ip route add <interface_prefix> dev <interface> proto static scope link src <interface_IP> table isp2
참고 : 위의 네 번째 줄에서 구문 문제가 발생할 수 있습니다. 이러한 경우, 네 번째 명령의 구문은 다음과 같습니다.
ip rule add iif <interface> table isp2 priority 1000
Linux를 실행 중이며 RedHat / CentOS 기반 배포판을 사용하고 있다고 가정합니다. 다른 유닉스와 배포판에는 비슷한 단계가 필요하지만 세부 사항은 다를 수 있습니다.
테스트로 시작하십시오 (@Peter의 답변과 매우 유사합니다. 다음을 가정합니다.
명령은 다음과 같습니다.
$ echo 200 isp1 >> /etc/iproute2/rt_tables
$ ip rule add from eno1 table isp1
$ ip route add default via 192.168.1.1 dev eno1 table isp1
방화벽은 아무 관련이 없습니다. 응답 패킷은 항상 올바른 IP에서 전송되었지만 이전에는 잘못된 인터페이스를 통해 전송되었습니다. 이제 올바른 IP의 패킷이 올바른 인터페이스를 통해 전송됩니다.
위의 작업이 수행되었다고 가정하면 이제 규칙 및 경로 변경을 영구적으로 만들 수 있습니다. 사용중인 Unix 버전에 따라 다릅니다. 이전과 마찬가지로 RH / CentOS 기반 Linux 배포판을 가정합니다.
$ echo "from eno1 table isp1" > /etc/sysconfig/network-scripts/rule-eno1
$ echo "default via 192.168.1.1 dev eno1 table isp1" > /etc/sysconfig/network-scripts/route-eno1
네트워크 변경이 영구적인지 테스트하십시오.
$ ifdown eno1 ; ifup eno1
그래도 문제가 해결되지 않으면 이후 버전의 RH / CentOS에서는 다음 두 가지 옵션 중 하나를 수행해야합니다.
개인적으로 저는 더 간단하게 지원되는 접근 방식이므로 rules 패키지를 설치하는 것을 선호합니다.
$ yum install NetworkManager-dispatcher-routing-rules
또 다른 강력한 권장 사항은 arp 필터링을 활성화하여 이중 네트워크 구성과 관련된 다른 문제를 방지하는 것입니다. RH / CentOS를 사용하여 다음 내용을 /etc/sysctl.conf 파일에 추가하십시오.
net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1