들어오는 것과 같은 인터페이스에서 답장을 하시겠습니까?


50

두 개의 인터페이스가있는 시스템이 있습니다. 두 인터페이스 모두 인터넷에 연결되어 있습니다. 그중 하나가 기본 경로로 설정됩니다. 이것의 부작용은 기본 경로가 아닌 인터페이스에 패킷이 들어 오면 기본 경로 인터페이스를 통해 회신이 다시 전송된다는 것입니다. iptables (또는 다른 것)를 사용하여 연결을 추적하고 원래 인터페이스를 통해 회신을 보내는 방법이 있습니까?

답변:


60
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 주소가 있기 때문에 작동합니다.


7
와우, 이것이 바로 내가 찾던 것입니다. RH 기반 배포판을 찾는 사람이있는 경우 관련 규칙 및 경로 명령을 'rule-eth0'또는 'route-eth0'(예 : ifup / ifdown에 추가되거나 제거 될) 파일에 넣을 수 있습니다. 이 파일들을 ifcfg-eth0 파일과 함께 두십시오. IPv6의 경우 'route6-eth0'기능이 내장되어 있지만 'rule6-eth0'은 아직 내장되어 있지 않습니다.
Kyle Brantley

18
나를 위해 그것은 명령 에서 dev매개 변수를 생략했을 때만 작동 ip rule하므로 다음을 실행하십시오.ip rule add from <interface_IP> table isp2
cdauth

2
당신은 인터페이스가 추가 상승 할 때 다음을 생성 할 수 있습니다 up ip rule add from <interface_IP> table isp2up ip route add default via <gateway_IP> dev ppp0 table isp2관련 인터페이스에서 당신을 / etc / 네트워크 / 인터페이스.
g.rocket

4
나는 제거했다 dev <interface>에서 ip rule내 상자에 작동하도록 할 수 있습니다. 내가 올바르게 이해하고 있다면 dev <interface>, 재정의 된 경로로 올바른 인터페이스로 넘어 가야 하는 잘못된 인터페이스에 설정된 패킷을 필터링했지만 인터페이스에 의한 규칙 필터링으로 인해 패킷이 발생하는 것을 막고있었습니다.
binki

2
대부분의 다른 사람들과 마찬가지로이 명령이 작동하지 않도록 명령 dev <interface>에서 제거 ip rule해야했습니다. 답변을 업데이트하십시오! 그 세부 사항을 제외하고는 매력처럼 작동했습니다. 감사합니다, @Peter!
MoonSweep

6

다음 명령 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 모듈이 그들을 추적하도록 할 수 있습니다.


좋은. 나는 마킹에 관한 모든 것을 잊었다. 거기 가야 겠어
Shawn J. Goff

5

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

너무 많이 시도했지만이 시나리오를 제외하고는 아무것도 작동하지 않았습니다. 많은 감사합니다.
agaggi

3

Linux를 실행 중이며 RedHat / CentOS 기반 배포판을 사용하고 있다고 가정합니다. 다른 유닉스와 배포판에는 비슷한 단계가 필요하지만 세부 사항은 다를 수 있습니다.


테스트로 시작하십시오 (@Peter의 답변과 매우 유사합니다. 다음을 가정합니다.

  • eno0은 isp0이며 전체 기본 게이트웨이가 있습니다.
  • eno1은 isp1이며 게이트웨이 192.168.1.1의 IP / 범위 192.168.1.2/24를 갖습니다.

명령은 다음과 같습니다.

$ 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에서는 다음 두 가지 옵션 중 하나를 수행해야합니다.

  • 기본 NetworkManager.service를 사용하지 마십시오 . 대신 network.service 를 사용하십시오 . 나는 이것에 필요한 정확한 단계를 탐구하지 않았다. 서비스를 활성화 / 비활성화 하는 표준 chkconfig 또는 systemctl 명령과 관련이 있다고 생각합니다 .
  • NetworkManager-dispatcher-routing-rules 패키지 설치

개인적으로 저는 더 간단하게 지원되는 접근 방식이므로 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.