Linux 네트워크 네임스페이스를 사용한 인터넷 연결

Linux 네트워크 네임스페이스를 사용한 인터넷 연결

Ubuntu 17.1 배포판에서 Linux 네임스페이스를 사용하려고 합니다. 궁극적인 목표는 애플리케이션이 인트라넷 유선 연결 대신 3G 모뎀을 통해 특정 네트워크 인터페이스를 사용하도록 하는 것입니다. 내 컴퓨터에는 3개의 네트워크 인터페이스가 있습니다.

enp0s25:
인터넷 연결 없이 Inet 10.18.0.101 인트라넷 라우터에 유선 연결

wlp3s0:
무선, 원격 관리에 사용됨, 프로덕션 환경 inet 10.11.1.116에서는 사용할 수 없음

enx8cae4cff1c86:
유선 에뮬레이트된 4G USB 모바일 모뎀이 마침내 inet 10.11.1.142에 출시됩니다 .

wlp3s0 및 enx8cae4cff1c86은 동일한 라우터에 연결되어 있습니다. 다음 코드를 사용하여 라는 네임스페이스를 만들었습니다.이동하다

ip netns add mobilens
ip link set dev enx8cae4cff1c86 netns mobilens
ip netns exec mobilens ifconfig enx8cae4cff1c86 10.1.1.10/24 up
ip netns exec mobilens ifconfig lo 127.0.0.1/8 up
ip netns exec mobilens route add default gw 10.1.1.1
ip netns exec mobilens dhcpcd enx8cae4cff1c86

또한 다음 항목을 사용하여 /etc/netns/mobilens/resolv.conf 파일을 만들었습니다.

nameserver 10.11.1.1
nameserver 8.8.8.8
search google.com

네임스페이스에서 ifconfig 실행

ip netns exec mobilens ifconfig

Return
inet 10.1.1.10 netmask 255.255.255.0
네임스페이스에 사용된 DNS 서버에 다음과 같이 쿼리하면

ip netns exec mobilens nmcli dev show | grep DNS

그것은 돌아온다

IP4.DNS[1]: 10.11.1.1

이 네임스페이스를 사용하여 google.com에 ping을 시도했지만 해결되었지만 실패했습니다.

ip netns exec mobilens ping www.google.com

PING www.google.com (172.217.7.4) 56(84) 바이트의 데이터.
10.1.1.10(10.1.1.10)에서 대상 호스트에 연결할 수 없습니다. icmp_seq=1 10.1.1.10(10.1.1.10)에서 대상 호스트에 연결할 수 없습니다.
icmp_seq=3 대상 호스트에 연결할 수 없습니다.

이 네임스페이스를 통해 인터넷에 액세스하려면 또 무엇을 해야 합니까?

편집 1: 네임스페이스에서 xterm을 사용하면 테스트가 더 쉬워집니다.
나도 사용하기 시작했다

dhclient -d enx8cae4cff1c86

네임스페이스의 DHSCP 서버 대신.
그러나 문제는 남아 있습니다. 나는 이것이 어느 정도 라우팅 때문이라고 생각합니다. 다음은 네임스페이스 외부 인터페이스의 Route 명령 결과입니다.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         router.asus.com 0.0.0.0         UG    303    0        0 wlp3s0
10.11.1.0       0.0.0.0         255.255.255.0   U     303    0        0 wlp3s0
10.18.0.0       0.0.0.0         255.255.255.0   U     0      0        0 enp0s25
10.18.0.0       0.0.0.0         255.255.255.0   U     100    0        0 enp0s25

이것은 네임스페이스에서 나온 것입니다.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.1.1.1       0.0.0.0         UG    0      0        0 enx8cae4cff1c86
10.11.1.0       0.0.0.0         255.255.255.0   U     0      0        0 enx8cae4cff1c86
10.1.1.0       0.0.0.0         255.255.255.0   U     0      0        0 enx8cae4cff1c86

네임스페이스 라우팅에 대한 가능한 수정 사항에 대한 제안 사항이 있습니까?

답변1

[해결됨]
해결 방법은 기본 게이트웨이를 수정하는 것입니다. 네임스페이스 구성 파일에 다음 줄을 추가했습니다.

ip netns exec mobilens ip route change default via 10.11.1.1 dev enx8cae4cff1c86

이 단계만으로 www.google.com을 핑할 수 있습니다.
그러나 관리 Wi-Fi 연결을 비활성화하면 핑에서 이름 확인과 관련된 오류가 발생합니다. 나는 \etc\netns\mobilens\resolv.conf에 다음을 포함하는 파일을 생성하여 이 문제를 해결했습니다
.

nameserver 10.11.1.1
nameserver 8.8.8.8
search google.com

이제 특정 도메인에서 인터넷에 액세스할 수 있습니다.

답변2

부분 답변:

먼저 네트워크 네임스페이스에서 xterm을 시작하면 보다 쉽게 ​​테스트할 수 있습니다. 나는 내 색상을 선호하고 루트 대신 내 사용자 ID를 사용합니다.

ip netns exec mobilens su -c "xterm -bg yellow &" my_userid

둘째, DHCP를 실행 중입니다.섬기는 사람해당 네임스페이스에서는 클라이언트 대신반품네트워크 관리자를 실행하세요. 당신이 원하는 것은 DHCP입니다고객해당 네임스페이스 또는 정적 구성에서. 여러 네임스페이스에 직면했을 때 네트워크 관리자가 무엇을 하는지 모르겠습니다(저는 NM에 대해 좋지 않은 경험을 했고 결코 원하는 대로 작동하도록 할 수 없었습니다).

그래서:누구나NM이 네임스페이스의 인터페이스에 대해 무엇을 하고 있는지 확인하세요(NM이 방해가 된다면 중지하세요).또는올바른 게이트웨이, 경로 및 이름 서버를 사용하여 정적으로 구성합니다.또는예를 들어, DHCP 클라이언트를 사용 dhclient -d enx8cae4cff1c86하고 출력을 관찰하여 모든 것이 올바르게 할당되었는지 확인하십시오.

의심스러운 경우 tcpdump인터페이스에서 실행하여 데이터 패킷이 정상적으로 나가는지 확인하세요.

관련 정보