설정 후네트워크 공유를 위한 쉬운 방법Ubuntu 시스템에서 다운스트림 Arch Linux 시스템의 DHCP를 통해 IP 주소를 얻으면 Arch 시스템은 ssh
Ubuntu 시스템에 연결하고 DNS를 확인할 수 있지만 인터넷과 통신할 수 없습니다( ping
timeout 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
). 모든 것이 순조롭게 진행되면 외부 세계와 자유롭게 대화할 수 있습니다.