it-swarm-ko.tech

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

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

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

64
Peter

다음 명령은 마크가 1 인 패킷 (localhost에 대한 패킷 제외)에 대해 eth1를 통해 대체 라우팅 테이블을 만듭니다. ip 명령은 iproute2 제품군 (우분투 : iprouteiproute 설치 http://bit.ly/software-small , iproute-dociproute-doc 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

NOTE : 위의 네 번째 줄에서 구문 문제가 발생할 수 있습니다. 이러한 경우, 네 번째 명령의 구문은 다음과 같습니다.

ip rule add iif <interface> table isp2 priority 1000
5
Héctor Sánchez

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
3
zaTricky