개발하는 동안 Linux 시스템에서 "외부 액세스 없음"을 시뮬레이션할 수 있습니까?

개발하는 동안 Linux 시스템에서 "외부 액세스 없음"을 시뮬레이션할 수 있습니까?

때로는 외부 인터넷에 액세스할 수 없는 서버에 애플리케이션을 업로드합니다.

내 컴퓨터에 동일한 환경을 만들어 애플리케이션의 특정 기능을 테스트하고 오류(예: 외부 소스에서 RSS 읽기)를 방지하고 싶습니다.

시뮬레이션을 위해 이더넷 케이블을 뽑아볼까도 생각했지만 매우 오래된 것 같고 서버의 제한 사항에 비해 이 작업을 수행할 때(특히 Python에서) 동일한 예외가 발생하는지 모르겠습니다.

그렇다면 개발 컴퓨터에서 "외부 액세스 없음"을 어떻게 시뮬레이션합니까? 이더넷 인터페이스를 "비활성화"하고 나중에 다시 활성화하면("no Trouble" 명령 사용) 외부 액세스가 없는 서버와 동일한 동작을 하게 됩니까?

우분투 10.04를 사용하고 있습니다. 감사해요!

답변1

기본 경로를 제거하면 문제가 해결됩니다. show Routing Table을 사용 /sbin/route하고 다음을 사용하여 기본값을 제거할 수 있습니다.

sudo /sbin/route del default

이렇게 하면 시스템이 로컬 네트워크에 연결할 수 있지만 로컬 네트워크로 향하는 패킷을 어디로 보낼지 알 수 없습니다. 이는 아마도 "외부 액세스 없음" 상황을 매우 정확하게 시뮬레이션할 것입니다.

다시 넣거나 route add(게이트웨이가 무엇인지 기억) 네트워크를 다시 시작할 수 있습니다. 방금 NetworkManager가 있는 시스템에서 이 작업을 시도했는데 기본값을 전환하면 문제가 없었습니다. 방금 패널 아이콘을 클릭하고 로컬 네트워크를 다시 선택하여 복원했습니다. NM이 다른 행사에서 단독으로 이런 일을 할 수도 있으니 주의하세요.

또 다른 방법은 규칙을 사용하여 iptables아웃바운드 트래픽을 차단하는 것입니다. 하지만 라우팅 접근 방식이 더 나을 수도 있다고 생각합니다.

답변2

당신이 쓴

그렇다면 개발 컴퓨터에서 "외부 액세스 없음"을 어떻게 시뮬레이션합니까?

이더넷 인터페이스를 "비활성화"하고 나중에 다시 활성화하려면 어떻게 해야 합니까?

이 두 가지 질문인가요, 아니면 하나의 질문인가요? 무슨 뜻인지 잘 모르겠습니다 simulate "no external access". 그러나 이더넷 인터페이스를 비활성화하려면 다음을 수행하면 됩니다.

#ifdown eth0
#ifup eth0

또는 인터넷 장치 중 하나. 그러면 이더넷 인터페이스가 각각 꺼지고 켜집니다.

답변3

호스트 전용 네트워크 인터페이스만 제공하는 가상 머신(사용자 모드 Linux, VServer, OpenVZ, VirtualBox, VMWare, KVM 등)에서 코드를 실행할 수 있습니다(즉, 가상 머신에서 호스트 이외의 다른 곳으로의 경로 없음). .

전용 사용자로 애플리케이션을 실행하는 경우 appuser해당 사용자의 네트워크 액세스를 제한할 수 있습니다. 당신이 가지고 있는지 확인하십시오iptables(우분투:iptables iptables 설치 http://bit.ly/software-small) 그리고iproute2( ip명령)(우분투:IP 라우팅 iproute http://bit.ly/software-small 설치,iproute 문서 iproute-doc http://bit.ly/software-small 설치) 설치되었습니다. 그런 다음 iptables실행 중인 프로세스에서 나가는 트래픽에 사용으로 태그를 지정 appuser하고 해당 사용자에 대한 대체 라우팅 테이블을 설정할 수 있습니다 ip rule.ip route

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
iptables -t mangle -A OUTPUT -m owner --uid-owner appuser -j MARK --set-mark 1

(참고: 테스트되지 않았습니다. 또한 참조하세요.추가 Linux IP 패킷 수정 예.)

답변4

이것이 바로 컨테이너의 용도입니다(https://linuxcontainers.org/) chroot와 약간 유사하지만 더 세분화되어 있으며 네트워크 제어 및 기타 기능이 있습니다.

불행히도 나는 그것들을 사용하는 방법을 모릅니다. (나의 훈련은 단순히 그것이 존재하고 그 일반적인 목적을 이해하는 것뿐이었습니다.)

docker컨테이너를 관리하는 애플리케이션이므로 이 작업을 수동으로 수행하고 싶지 않을 것입니다.

관련 정보