Ubuntu 10.10 상자에 USB 셀룰러 모뎀과 홈 LAN 연결이 있습니다.
둘 다 독립적으로 작동합니다.
두 가지를 동시에 연결하는 방법과 어떤 응용 프로그램이 어떤 장치를 사용하여 인터넷에 연결하는지 지정할 수 있는지 알고 싶습니다.
이 작업을 수행하는 방법을 아는 사람이 있나요?
답변1
어떤 패킷이 어디로 가는지 결정하는 방법에 따라 여러 가지 가능성이 있습니다. 대부분의 경우 Linux에서 TCP/IP 네트워킹이 작동하는 방식을 이해해야 합니다. 복잡한 일을 할 때 알아야 할 주요 도구는 다음과 같습니다.iptables
(우분투:iptables ) 그리고iproute2( ip
명령)(우분투:IP 라우팅 ,iproute 문서 ).
대상 IP 주소를 전혀 구별할 수 있다면 간단합니다. 원하는 대로 IP 주소를 라우팅하면 됩니다. 예를 들어, 다음 명령을 실행하면 모든 패킷이 1.2.3이 됩니다.엑스1.2.4.2 via ppp0
, 기타 패킷 via via eth0
.
route add -net 1.2.3.4/24 ppp0
route add -host 1.2.4.2 ppp0
route add -net 0.0.0.0/0 eth0
iptables
더 복잡한 요구 사항이 있는 경우 를 사용 하는 것이 좋습니다 ip route
. 예를 들어, 다음 명령은 1로 표시된 모든 패킷이 via를 통해 나가고 eth0
2로 표시된 모든 패킷이 via를 통해 나가 도록 특수 라우팅 테이블을 설정합니다( 루프백 인터페이스에 고정되는 패킷 ppp0
제외 ).localhost
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 eth0
ip rule add fwmark 2 table 2
ip route add 127.0.0.0/8 table 2 dev lo
ip route add 0.0.0.0/0 table 2 dev ppp0
이제 iptables
나가는 패킷을 "중단"하여 패킷이 취하는 경로를 결정하는 태그를 추가할 수 있습니다. 예를 들어 나가는 모든 SMTP 트래픽(포트 25)을 보내는 방법 과 eth0
사용자로 실행되는 애플리케이션을 통해 모든 proxy
트래픽을 보내는 방법은 다음과 같습니다 ppp0
.
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -m owner --uid-owner proxy -j MARK --set-mark 2
당신은 또한 볼 수 있습니다인터넷에 연결하기 위한 2개의 네트워크 인터페이스. 도메인 이름을 기준으로 사용하도록 선택그리고소프트웨어를 다양한 네트워크 인터페이스에 바인딩.
두 인터페이스가 모두 연결될 때 실행되도록 이러한 명령을 예약해야 합니다. /etc/network/if-up.d/0justin-routes
원하는 명령을 실행하기 위해 호출되는 스크립트를 작성하는 것이 좋습니다 . 이 스크립트는 네트워크 인터페이스가 시작될 때마다 실행됩니다. 이름이 a로 시작되므로 0
라우팅이 예상되는 애플리케이션별 설정 이전에 프로세스 초기에 실행됩니다. /etc/network/if-down.d/
인터페이스 중 하나가 실패하는 경우에도 일부 작업을 수행하려는 경우 대칭이 있습니다. (모든 관련 경로가 자동으로 제거되므로 일부 패킷을 다른 인터페이스로 대체하려고 할 때 정체될 수 있습니다.)
ifup 스크립트는 다음 위치에 기록됩니다.interfaces(5) man page
. 알아야 할 주요 사항은 시작되거나 종료되는 인터페이스의 이름이 환경 변수에 있다는 것입니다 IFACE
. 다른 인터페이스가 작동 중인지 확인할 수 있습니다 if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then …
.