두 개의 인터페이스가 있는 시스템이 있습니다. 두 인터페이스 모두 인터넷에 연결되어 있습니다. 이들 중 하나는 기본 경로로 설정됩니다. 이에 대한 부작용은 패킷이 기본이 아닌 라우팅 인터페이스로 들어오는 경우 기본 라우팅 인터페이스를 통해 응답이 다시 전송된다는 것입니다. iptables(또는 다른 것)를 사용하여 연결을 추적하고 원래 인터페이스를 통해 응답을 다시 보내는 방법이 있습니까?
답변1
echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 prio 1
ip route add default via <gateway_IP> dev <interface> table isp2
위의 경우 ipfilter를 사용한 패킷 표시가 필요하지 않습니다. 나가는(응답) 패킷은 원래 두 번째 인터페이스에 연결하는 데 사용된 IP 주소를 나가는 패킷의 소스(발신자) 주소로 갖기 때문에 작동합니다.
답변2
다음 명령은 eth1
태그 1이 있는 패킷(localhost로 전송된 패킷 제외)을 통해 대체 라우팅 테이블을 생성합니다. 이 ip
명령은 다음에서 비롯됩니다.IP 경로 2키트(우분투:IP 라우팅 iproute http://bit.ly/software-small 설치,iproute 문서 iproute-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 모듈이 이를 추적하도록 지시하는 또 다른 규칙이 필요할 수도 있습니다.
답변3
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
답변4
나는 당신이 Linux를 실행하고 있고 RedHat/CentOS 기반 배포판을 사용하고 있다고 가정합니다. 다른 Unix 및 배포판에도 비슷한 단계가 필요하지만 세부 사항은 다를 수 있습니다.
테스트부터 시작하세요(이는 @Peter의 답변과 매우 유사합니다. 다음을 가정합니다.
- eno0은 isp0이며 전체 기본 게이트웨이를 갖습니다.
- eno1은 isp1, IP/범위 192.168.1.2/24, 게이트웨이 192.168.1.1입니다.
명령은 다음과 같습니다.
$ 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-dispatcher-routing-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