어떤 조치를 취해야 하는지 정확히 알고 싶습니다.수동Linux 기반 운영 체제를 실행하는 워크스테이션에서 공유 인터넷 연결을 구성합니다.
NetworkManager 서비스가 설치된 init 시스템으로 systemd를 사용하도록 구성된 Linux 배포판을 사용할 때 자동화된 방식(시스템의 기본 네트워크 설정 사용)이나 다음과 같은 유틸리티를 사용하여 두 인터페이스 간의 공유 인터넷 연결을 구성할 수 있다는 것을 알고 있습니다. nm-connection-editor로). 자동화된 방법을 사용하여 공유 인터넷 연결을 구성한 후 시스템에 대한 변경 사항을 관찰할 수 있다면 이를 수동으로 다시 만드는 데 필요한 지식을 갖게 되는 것은 당연합니다. 이를 염두에 두고 이 작업을 수행하기 위해 수행한 단계와 찾은 내용은 다음과 같습니다.
기본적으로 공유 연결을 "수신"하는 인터페이스에는 IP 주소 10.42.0.1 및 /24 서브넷 마스크가 할당됩니다.
dnsmasq는 DHCP 및 DNS 서비스를 제공하며 기본적으로 10.42.0.1을 수신합니다.
- DHCP는 10.42.0.2-10.42.0.254 범위의 IP 주소를 제공하고, DNS는 호스트 인터페이스의 기본 확인자를 가리킵니다.
공유 연결을 "수신"하는 인터페이스 서브넷에 대한 경로를 포함하도록 라우팅 테이블이 수정되었습니다. 지금 바로10.42.0.0/24 dev enp1s0 프로토타입 커널 범위 링크 src 10.42.0.1
ipv4/ipv6과 관련된 일련의 sysctl 커널 매개변수가 변경되었습니다. 다음 bash를 사용하기 전후에 관련 sysctl 매개변수를 덤프했습니다.
mybox ~ # sysctl -a | egrep "ipv4|ipv6" > sysctl_before
[ENABLE SHARED CONNECTION]
mybox ~ # sysctl -a | egrep "ipv4|ipv6" > sysctl_after
그런 다음 두 파일을 비교하여 다음과 같은 결과를 얻었습니다.
6c6
< net.ipv4.conf.all.accept_redirects = 1
---
> net.ipv4.conf.all.accept_redirects = 0
20c20
< net.ipv4.conf.all.forwarding = 0
---
> net.ipv4.conf.all.forwarding = 1
52c52
< net.ipv4.conf.default.forwarding = 0
---
> net.ipv4.conf.default.forwarding = 1
84c84
< net.ipv4.conf.enp1s0.forwarding = 0
---
> net.ipv4.conf.enp1s0.forwarding = 1
116c116
< net.ipv4.conf.lo.forwarding = 0
---
> net.ipv4.conf.lo.forwarding = 1
148c148
< net.ipv4.conf.wlp2s0.forwarding = 0
---
> net.ipv4.conf.wlp2s0.forwarding = 1
185c185
< net.ipv4.ip_dynaddr = 0
---
> net.ipv4.ip_dynaddr = 1
187c187
< net.ipv4.ip_forward = 0
---
> net.ipv4.ip_forward = 1
381c381
< net.ipv6.conf.all.forwarding = 0
---
> net.ipv6.conf.all.forwarding = 1
431c431
< net.ipv6.conf.default.forwarding = 0
---
> net.ipv6.conf.default.forwarding = 1
481c481
< net.ipv6.conf.enp1s0.forwarding = 0
---
> net.ipv6.conf.enp1s0.forwarding = 1
531c531
< net.ipv6.conf.lo.forwarding = 0
---
> net.ipv6.conf.lo.forwarding = 1
581c581
< net.ipv6.conf.wlp2s0.forwarding = 0
---
> net.ipv6.conf.wlp2s0.forwarding = 1
나는필터그리고냇iptables 규칙 세트는 다음을 생성합니다.
필터
3a4,12
> -A INPUT -i enp1s0 -p udp -m udp --dport 67 -j ACCEPT
> -A INPUT -i enp1s0 -p tcp -m tcp --dport 67 -j ACCEPT
> -A INPUT -i enp1s0 -p udp -m udp --dport 53 -j ACCEPT
> -A INPUT -i enp1s0 -p tcp -m tcp --dport 53 -j ACCEPT
> -A FORWARD -d 10.42.0.0/24 -o enp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
> -A FORWARD -s 10.42.0.0/24 -i enp1s0 -j ACCEPT
> -A FORWARD -i enp1s0 -o enp1s0 -j ACCEPT
> -A FORWARD -o enp1s0 -j REJECT --reject-with icmp-port-unreachable
> -A FORWARD -i enp1s0 -j REJECT --reject-with icmp-port-unreachable
네트워크 주소 변환
4a5
> -A POSTROUTING -s 10.42.0.0/24 ! -d 10.42.0.0/24 -j MASQUERADE
그러나 이러한 변경 사항만으로는 작동하는 공유 인터넷 연결을 생성하는 데 충분하지 않은 것 같습니다. 수동으로 복사하면 제가 절실히 추구하는 8.8.8.8의 훌륭한 핑 응답을 얻을 수 없기 때문입니다.
명확성을 위해 공유 연결을 사용하는 모든 클라이언트가 기본 게이트웨이로 10.42.0.1을 지정하는 기본 경로를 갖고 있는지도 확인했습니다.
내가 놓친 부분을 이해하도록 도와줄 수 있는 사람이 있나요?
답변1
"공유 인터넷 연결"은 특별히 잘 정의되어 있지 않습니다. 원칙적으로 라우팅을 활성화하고(아직 활성화되지 않은 경우) "공유 PC" 및 "다른 PC"에서 LAN 연결을 수동으로 설정함으로써 "인터넷 연결"을 "공유"할 수 있습니다. NAT도 필요하지 않습니다.
그런 다음 WLAN 액세스 포인트 활성화 등과 같은 변형이 있습니다.
즉, 다음은 systemd 없이 Devuan 시스템에서 사용하고 Network가 인터페이스 NAT를 관리하는 스크립트입니다. 이는 "공유 인터넷 연결"이 의미하는 것일 수도 있고 아닐 수도 있습니다.
#!/bin/bash
# masquerade $1 (e.g. eth0, ppp0) as $2 (default wlan0)
INTIF="$1"
EXTIF=${2:-wlan0}
echo $INTIF $EXTIF
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
이 스크립트의 일부 항목은 꼭 필요한 것은 아니지만 편리하다고 생각합니다.
DHCP 서버를 실행해야 하는 경우 수동으로 시작 dhcpd
하고 구성 파일을 미리 설정합니다.