다소 이상한 문제가 있습니다. 나는 두 개의 네트워크 인터페이스가있는 서버가 eth0
와 eth1
. 각각 다른 네트워크에 연결되어 있습니다. 각 네트워크에는 인터넷 게이트웨이가 있습니다. 서버에는 http (서버 스크랩 웹 사이트의 일부 스크립트), nfs 클라이언트, samba 클라이언트, dns 클라이언트 및 이메일 가져 오기 도구 등 다양한 아웃 바운드 연결이 있습니다.
내가 들어 가지 않는 이유로 인해 아웃 바운드 클라이언트를 분할해야 아웃 바운드 http, nfs, samba 및 dns 트래픽이 요청되고 eth0
다른 모든 항목은 종료됩니다 eth1
.
몇 가지 Google 검색을 읽었으며 iptables
필요한 것 같습니다. 하지만 실마리가 없습니다. 나는를 통해 인바운드 방화벽 규칙을 관리하는 데만 사용됩니다 ufw
.
누군가가 몇 가지 예제 규칙으로 시작하여 시스템이 부팅시 이러한 규칙을 채택하도록하는 방법을 알려줄 수 있습니까? SSH 연결에서 나를 잠그지 않는 것이 이상적입니다 ( 물리적 액세스 권한 은 얻을 수 있지만 오히려 그렇지는 않습니다).
편집 계정의 모든 아웃 바운드 트래픽을 하나의 인터페이스로 제한 할 수 있으면 클라이언트를 두 명의 사용자로 분할 할 수 있습니다. 더 쉬운 것처럼 보이는 종이에.
답변
별도의 라우팅 테이블과 해당 테이블을 사용하여 표시된 패킷을 라우팅하는 정책을 설정하고 iptables / netfilter가 특정 패킷을 표시하도록합니다.
테이블을 작성하십시오.
echo 1 known >> /etc/iproute2/rt_tables
라우팅 규칙을 작성하십시오 ( ip
명령은 iproute2 의 명령 임).
ip rule add from all fwmark 1 table known
“known”이라는 테이블을 만들고 마크가 1 인 패킷이 “known”테이블에 따라 라우팅된다는 라우팅 규칙을 만들었습니다. 알려진 프로토콜 목록이기 때문에 알려진 것으로 만 불렀습니다. 원하는 이름을 지정할 수 있습니다. 이제 알려진 테이블을 설정하여 올바른 방법으로 라우팅합니다.
ip route add default dev eth0 table known
iptables 규칙을 작성하십시오.
iptables -t mangle -I PREROUTING -p tcp --dport 111 -j MARK --set-mark 1
iptables -t mangle -I PREROUTING -p tcp --dport 2049 -j MARK --set-mark 1
이 예제는 NFS 포트 (111, 2049)의 패킷을 1로 표시합니다.이 규칙을 ‘mangle’iptable에 추가합니다. 이것은 라우팅 테이블과 다르며 변경할 수 없습니다. mangle 테이블은 NAT 이외의 방식으로 패킷을 변경하기위한 것입니다.
이제 다른 인터페이스를 통해 다른 모든 것을 라우팅하기 위해 표준 라우팅 테이블에 경로를 추가합니다.
ip route add default dev eth1
이것을 실제로 이해하려면 LARTC howto 의 섹션 4와 11을 읽으십시오 .
답변
” 가장 쉬운 “방법은 단일 프로그램에 특정 인터페이스 (또는 인터페이스의 IP)를 사용하도록 지시하는 것입니다.
ping -I eth1 8.8.8.8
eth1을 소스 인터페이스로 사용하도록 핑 명령
wget --bind-address 10.0.0.1 http://www.google.it/
wget에게 IP 주소 가있는 인터페이스 를 통과 하도록 지시 10.0.0.1
합니다.
솔직히 나는 당신이 필요한 모든 프로그램 에서 가능한지 알지 못하지만 작성해야 할 규칙 iptables
과 iproute
프로그램 을 정리하기 시작했습니다 .
처음 에는 여러 인터넷 연결 에서이 자습서 를 읽어야 합니다 . 잘 읽어 보면 , / 및 에 대한 수천 개의 iptables 튜토리얼 중 하나입니다 .outbound filtering
process
pid filtering
port filtering
답변
이에 대한 올바른 방법은 나가는 패킷에 사용하려는 인터페이스에 bind ()하는 것입니다. 그런 다음 ip route
및 ip rule
명령으로 경로를 설정하여 발신 인터페이스를 기반으로 패킷이 라우팅되는 방법을 제어 할 수 있습니다 . 내 예에서는 다음 네트워크를 가정합니다.
- eth0 :
- 주소 : 192.168.0.2/24
- 기본 게이트웨이 : 192.168.0.1
- eth1 :
- 주소 : 192.168.1.2/24
- 기본 게이트웨이 : 192.168.1.1
대체라는 eth0에 대한 트래픽 발신과 main이라고하는 eth1에 대한 하나의 테이블을 생성합니다. 라우팅 테이블 main은 항상 존재하며 route
and ip route
명령에 사용되는 일반 테이블입니다 . 대부분의 사람들은 다른 테이블을 다루지 않습니다. alternate라는 테이블을 만들려면 다음 행을 추가합니다 /etc/iproute2/rt_tables
.
10 alternate
기본 테이블의 기본 우선 순위는 254입니다. 라우팅 테이블이 적용되는 규칙은 ip rule
명령에 의해 제어됩니다 . 기본적으로이 명령은 다음과 같은 기존 규칙 목록을 인쇄합니다.
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
이것은 기본적 local
으로 내 자신의 IP 주소와 같은 로컬 경로에 대해 커널이 유지 관리하는 특수 테이블 인 테이블에서 경로를 찾습니다 . 그런 다음 테이블 기본 및 테이블 기본값을 시도합니다. 테이블 기본값은 일반적으로 비어 있으므로 기본 항목과 일치하지 않으면 호스트에 대한 경로가 없습니다. 먼저, 테이블을 eth0 규칙으로 채우십시오.
sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1
일반적으로 alternate
테이블 이 테이블과 유사하게 보이기를 원할 것 main
입니다. 라우팅이 달라야 할 때만 차이점이 있습니다. 문자 그대로 모든 NFS, HTTP 등의 트래픽이 eth1의 네트워크로 향하는 경우에도 eth0의 기본 게이트웨이를 통해 전송되도록하려면 위의 두 번째 행을 포함하지 않을 수 있습니다. 다음 단계는이 대체 라우팅 테이블 사용시기에 대한 규칙을 추가하는 것입니다.
sudo ip rule add from 192.168.0.0/24 pref 10 table alternate
이 규칙에 따르면 192.168.0 네트워크의 주소에서 들어오는 모든 트래픽 alternate
은 일반 main
테이블 대신 라우팅 테이블을 사용 합니다. 마지막 단계는 사용해야하는 모든 클라이언트가 eth0
이를 바인드해야합니다. wget
예를 들어 set을 사용하면 --bind-address=192.168.0.2
NFS의 경우clientaddr=192.168.0.2
마운트 옵션. Perl과 함께 LibWWW를 사용하는 경우 LWP :: UserAgent에서 localaddr 옵션을 설정하여 바인딩 된 로컬 인터페이스를 제어 할 수 있습니다. 클라이언트가있는 경우 바인딩을 제어 할 수 없으며 컴파일 소스는 옵션이 아니며 iptables 규칙을 사용하여 주소를 수정할 수는 있지만 해킹이 많고 작동하지 않을 수 있습니다. nat 테이블 또는 mangle 테이블의 PREROUTING 체인에 SNAT 규칙을 설정해야합니다. 이 작업을 수행하려면 위에 제공된 수정 된 라우팅 테이블이 여전히 필요합니다.