NetworkManager 연결 공유가 NAT 패킷을 지원하지 않는 것 같습니다.

NetworkManager 연결 공유가 NAT 패킷을 지원하지 않는 것 같습니다.

설정 후네트워크 공유를 위한 쉬운 방법Ubuntu 시스템에서 다운스트림 Arch Linux 시스템의 DHCP를 통해 IP 주소를 얻으면 Arch 시스템은 sshUbuntu 시스템에 연결하고 DNS를 확인할 수 있지만 인터넷과 통신할 수 없습니다( pingtimeout pacman). Arch Linux 머신에서:

$ ip route show dev net0
default via 10.42.0.1 metric 202
10.42.0.0/24 proto kernel scope link src 10.42.0.15 metric 202
$ ip addr show dev net0
...
inet 10.42.0.15/24 brd 10.42.0.255 scope global net0
...

Ubuntu 머신에서:

$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether e8:11:32:66:e3:4d brd ff:ff:ff:ff:ff:ff
    inet 10.42.0.1/24 brd 10.42.0.255 scope global eth0
    inet6 fe80::ea11:32ff:fe66:e34d/64 scope link 
       valid_lft forever preferred_lft forever
$ ip addr show dev wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 88:53:2e:1b:4b:1c brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.64/24 brd 192.168.1.255 scope global wlan0
    inet6 fe80::8a53:2eff:fe1b:4b1c/64 scope link 
       valid_lft forever preferred_lft forever

Ubuntu에서 자동 NAT 설정이 실패했을 수 있습니까? 어떻게 작동하는지 잘 모르겠습니다. 어떻게 감지합니까?

답변1

한 가지 혼란스러운 점은 Arch 머신의 DNS가 작동한다고 말씀하셨기 때문입니다. DNS 서버가 Ubuntu 시스템이면 좋습니다. DNS 서버가 외부에 있으면 혼란 스럽습니다. 저는 Arch에 대해 잘 알지 못합니다. 단 한 번만 설치해 봤기 때문입니다. 그러나 일반적으로 /etc/resolv.conf귀하의 DNS 서버가 누구인지 확인할 수 있습니다. 내부에 있는 경우 Ubuntu 시스템의 NAT 또는 전달이 제대로 작동하지 않을 가능성이 높습니다. 외부인 경우(외부 호스트에 대한 DNS 쿼리를 성공적으로 해결했음을 의미) 문제는 iptables 문제일 수 있습니다.

"무엇이 잘못될 수 있는지"의 관점에서 보면 전달/NAT일 가능성이 더 높습니다. 따라서 Ubuntu 시스템에서 전달이 실제로 활성화되어 있는지 확인하십시오.

fireapple# cat /proc/sys/net/ipv4/conf/all/forwarding 
1

"0"이 반환되면 전달이 활성화되지 않을 수 있습니다. 일시적으로 문제를 해결하려면

fireapple# echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

재부팅 후에도 지속되도록 하려면 /etc/sysctl.conf를 편집하고 다음 줄을 추가(또는 유사한 것으로 수정)하십시오.

net.ipv4.ip_forward = 1

다음은 NAT를 설정하는 빠른 스크립트입니다. 예를 들어 다음을 삽입하고 NAT.sh완료되었는지 확인한 chmod +x다음 에 넣으십시오 /usr/local/bin/. 두 호스트 모두 10.42.0.0/24 주소를 가지고 있다는 사실을 기반으로 어떤 인터페이스가 무엇을 수행하는지 가정했습니다.

#!/bin/sh
export INTERNET=wlan0  # Assuming eth0 is your Internet-facing address
export INTERNAL=eth0 # Likewise, assuming your WiFi is internal
iptables --flush      # Clean slate
iptables -t nat -A POSTROUTING -o $INTERNAL -j MASQUERADE
iptables -A FORWARD -i $INTERNAL -o $INTERNET -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INTERNET -o $INTERNAL -j ACCEPT

일단 자리를 잡으면 실행하십시오(예: sudo /usr/local/bin/NAT.sh). 모든 것이 순조롭게 진행되면 외부 세계와 자유롭게 대화할 수 있습니다.

관련 정보