네임스페이스에서 외부 네트워크를 ping할 수 없습니다. 포스트 라우팅이 작동하지 않을 수 있습니다.

네임스페이스에서 외부 네트워크를 ping할 수 없습니다. 포스트 라우팅이 작동하지 않을 수 있습니다.

네트워크 네임스페이스 내부에서 외부 IP(이 경우 Google)에 대해 ping을 시도하고 있습니다.

  ip netns add ns1
# Create v-eth1 and v-peer1: v-eth1 is in the host space whereas peer-1 is supposed to be in the ns
  ip link add v-eth1 type veth peer name v-peer1
# Move v-peer1 to ns
  ip link set v-peer1 netns ns1
# set v-eth1
  ip addr add 10.200.1.1/24 dev v-eth1
  ip link set v-eth1 up
# Set v-peer1 in the ns
  ip netns exec ns1 ip addr add 10.200.1.2/24 dev v-peer1
  ip netns exec ns1 ip link set v-peer1 up
# Set loopback interface in the ns
  ip netns exec ns1 ip link set lo up
# Add defaut route in the ns
  ip netns exec ns1 ip route add default via 10.200.1.1
# Set host routing tables
  iptables -t nat -A POSTROUTING -s 10.200.1.0/24 -j MASQUERADE
# Enable routing in the host
sysctl -w net.ipv4.ip_forward=1
#
  ip netns exec ns1 ping 8.8.8.8

어떤 이유로 이것은 virtualbox(내 노트북)의 가상 머신에서는 잘 작동하고 데스크탑(ubuntu 18.04)에서는 작동하지만 노트북의 호스트 OS(또한 Ubuntu 18.04)에서는 작동하지 않습니다.

나는 Traceroute를 시도했고 이것이 내가 얻은 것입니다:

노트북에

ノートブックのTracerouteエラー

데스크톱에서

デスクトップ上の正しい追跡パス

문제를 찾기 위해 무엇을 조사해야 하는지 아시는 분 계신가요? 내가 아는 한 방화벽이 설정되어 있지 않습니다(ufw는 비활성화되어 있습니다).

편집: 이것은 iptables-save -c를 통해 얻은 것입니다.

# Generated by iptables-save v1.6.1 on Fri Jan 17 18:05:36 2020
*filter
:INPUT ACCEPT [3774:2079111]
:FORWARD DROP [5:420]
:OUTPUT ACCEPT [3053:308301]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
[16984:18361691] -A FORWARD -j DOCKER-USER
[16984:18361691] -A FORWARD -j DOCKER-ISOLATION-STAGE-1
[12139:18094316] -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[0:0] -A FORWARD -o docker0 -j DOCKER
[4761:260319] -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
[0:0] -A FORWARD -i docker0 -o docker0 -j ACCEPT
[0:0] -A FORWARD -o br-6a72e380ece6 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[0:0] -A FORWARD -o br-6a72e380ece6 -j DOCKER
[0:0] -A FORWARD -i br-6a72e380ece6 ! -o br-6a72e380ece6 -j ACCEPT
[0:0] -A FORWARD -i br-6a72e380ece6 -o br-6a72e380ece6 -j ACCEPT
[4761:260319] -A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
[0:0] -A DOCKER-ISOLATION-STAGE-1 -i br-6a72e380ece6 ! -o br-6a72e380ece6 -j DOCKER-ISOLATION-STAGE-2
[16984:18361691] -A DOCKER-ISOLATION-STAGE-1 -j RETURN
[0:0] -A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
[0:0] -A DOCKER-ISOLATION-STAGE-2 -o br-6a72e380ece6 -j DROP
[4761:260319] -A DOCKER-ISOLATION-STAGE-2 -j RETURN
[16984:18361691] -A DOCKER-USER -j RETURN
COMMIT
# Completed on Fri Jan 17 18:05:36 2020
# Generated by iptables-save v1.6.1 on Fri Jan 17 18:05:36 2020
*nat
:PREROUTING ACCEPT [406:111092]
:INPUT ACCEPT [9:703]
:OUTPUT ACCEPT [29:2283]
:POSTROUTING ACCEPT [28:2114]
:DOCKER - [0:0]
[253:19770] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
[0:0] -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
[4:249] -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
[0:0] -A POSTROUTING -s 172.18.0.0/16 ! -o br-6a72e380ece6 -j MASQUERADE
[1:169] -A POSTROUTING -s 10.200.1.0/24 -j MASQUERADE
[0:0] -A DOCKER -i docker0 -j RETURN
[0:0] -A DOCKER -i br-6a72e380ece6 -j RETURN
COMMIT
# Completed on Fri Jan 17 18:05:36 2020

ベストアンサー1

Docker 자체는 방화벽 규칙을 변경합니다. Docker 때문인지는 모르겠지만iptables' 필터/FORWARD에 대한 기본 정책은 명시적으로 허용되지 않은 라우팅을 방지하기 위해 DROP으로 설정됩니다.

편집: 복귀 방향을 추가했습니다.

실험이 성공하려면 다음으로 충분해야 합니다(반환 트래픽도 활성화해야 함).

iptables -A FORWARD -i v-eth1 -j ACCEPT
iptables -A FORWARD -o v-eth1 -j ACCEPT

인터넷 인터페이스를 통해 보충할 수 있지만 이름은 모르겠습니다.

상태 추적을 통해 반환 트래픽을 허용하려면 일반적으로 다음 규칙을 사용하는 것이 좋습니다.연결하다, 따라서 초기 흐름만 관련됩니다. 부담 없이 사용해 보세요.

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i v-eth1 -j ACCEPT

참고로 4.7 이상의 커널에서는 일반적으로 conntrack 도우미(ftp...)가 올바르게/안전하게 작동하기 위해 더 많은 설정이 필요/허용되지만 이는 실험에 필요하지 않습니다(ICMP는 이미 처리됨). 이 블로그의 일부 정보:iptables 및 연결 추적 도우미의 안전한 사용.

의심스러운 경우(예: Docker와의 상호 작용) -I다른 것보다 먼저 규칙을 삽입해야 합니다. Docker를 다시 시작하면 규칙이 다시 변경될 수 있습니다. 이제 문제가 무엇인지 알았으니 문제를 Bootstrap 및 Docker와 통합하는 것은 여러분의 몫입니다.

Docker 사용에 대한 설명서를 읽고 싶을 수도 있습니다.iptables:도커와 iptables.

おすすめ記事