첫 번째 인터페이스에서 두 번째 인터페이스에 연결된 장치로 인터넷을 공유하려면 어떻게 해야 합니까?

첫 번째 인터페이스에서 두 번째 인터페이스에 연결된 장치로 인터넷을 공유하려면 어떻게 해야 합니까?

두 번째 이더넷 인터페이스에 연결된 로컬 네트워크의 장치가 첫 번째 이더넷 인터페이스에서 사용 가능한 인터넷을 사용할 수 있도록 네트워크를 어떻게 설정합니까?

iproute2를 사용하면 로컬 네트워크의 장치와 Linux PC 간의 연결만 생성할 수 있으며 Linux PC에는 여전히 인터넷 연결이 있습니다. 그러나 로컬 네트워크의 장치는 이 인터넷 연결을 사용할 수 없습니다.

[편집 2] 현재 구성은 다음을 기반으로 합니다.이 가이드.

내 IP 라우팅 주소가 잘못된 것 같은데 그게 문제인 것 같아요.

설정은 다음과 같습니다:

Internet
   |
   |
   |
(enp0s31f6) = Linux PC = (enx00249b233bda)
                                 |
                                 |
                                 |
                           NetworkSwitch
                                 |
                                 |
                                 |---(eth0) = Raspberry Pi 1
                                 |
                                 |
                                 |---(eth0) = Raspberry Pi 2

--     ethernet cable
|      ethernet cable
(eth0) network interface name

[편집] 목표는 Linux PC와 모든 Respberry Pi를 인터넷에 연결하고 서로 연결하는 것입니다.

모든 장치에는 고정 IP 주소가 있습니다.

Ubuntu 16.04를 실행하는 Linux PC

아래에 나열되지 않은 모든 설정은 기본 설정이어야 합니다.

Linux PC 현재 설정

ifconfig

enp0s31f6 Link encap:Ethernet  HWaddr 48:4d:7e:b1:94:4d  
          inet addr:128.40.57.144  Bcast:128.40.57.255  Mask:255.255.255.0
          inet6 addr: fe80::4a4d:7eff:feb1:944d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1806664 errors:0 dropped:82518 overruns:0 frame:0
          TX packets:81807 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:601022858 (601.0 MB)  TX bytes:15652101 (15.6 MB)
          Interrupt:19 Memory:f7100000-f7120000 

enx00249b233bda Link encap:Ethernet  HWaddr 00:24:9b:23:3b:da  
          inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::224:9bff:fe23:3bda/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:300302 errors:0 dropped:0 overruns:0 frame:0
          TX packets:373077 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:26170910 (26.1 MB)  TX bytes:476407809 (476.4 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:193 errors:0 dropped:0 overruns:0 frame:0
          TX packets:193 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:17086 (17.0 KB)  TX bytes:17086 (17.0 KB)

/etc/network/interfaces

# Static IP for internet connection
auto lo
iface lo inet loopback
auto enp0s31f6
iface enp0s31f6 inet static
address 128.40.57.144
netmask 255.255.255.0
gateway 128.40.50.245
dns-nameservers 144.82.250.1 193.160.250.1

# Network adapter interfacing with RPis
allow-hotplug enx00249b233bda
iface enx00249b233bda inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.11
dns-nameservers 144.82.250.1 193.160.250.1
post-up ip route add 192.168.0.0/24 dev enx00249b233bda src 192.168.0.10 table rt2
post-up ip route add default via 192.168.0.11 dev enx00249b233bda table rt2
post-up ip rule add from 192.168.0.10/32 table rt2
post-up ip rule add to 192.168.0.10/32 table rt2

/etc/iproute2/rt_tables

#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep
1 rt2

ip route show

default via 128.40.50.245 dev enp0s31f6 onlink 
128.40.57.0/24 dev enp0s31f6  proto kernel  scope link  src 128.40.57.144 
169.254.0.0/16 dev enp0s31f6  scope link  metric 1000 
192.168.0.0/24 dev enx00249b233bda  proto kernel  scope link  src 192.168.0.10 

라즈베리 파이 1 현재 설정

ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.22  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::3fa1:761c:f861:dae3  prefixlen 64  scopeid 0x20<link>
        ether dc:a6:32:2f:11:38  txqueuelen 1000  (Ethernet)
        RX packets 7489  bytes 537762 (525.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7417  bytes 2128900 (2.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2270  bytes 215650 (210.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2270  bytes 215650 (210.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether dc:a6:32:2f:11:3b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

/etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

/etc/dhcpcd.conf

# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.

# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel

# Inform the DHCP server of our hostname for DDNS.
hostname

# Use the hardware address of the interface for the Client ID.
clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid

# Persist interface configuration when dhcpcd exits.
persistent

# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit

# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu

# Most distributions have NTP support.
#option ntp_servers

# A ServerID is required by RFC2131.
require dhcp_server_identifier

# Generate SLAAC address using the Hardware Address of the interface
#slaac hwaddr
# OR generate Stable Private IPv6 Addresses based from the DUID
slaac private

# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0
#static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1

# fallback to static profile on eth0
#interface eth0
#fallback static_eth0

# Static IP for connection to Recording PC
interface eth0
static ip_address=192.168.0.22/24
static routers=192.168.0.11
static domain_name_servers=192.168.0.11

답변1

RasPi는 동일한 네트워크 세그먼트에 있고 IP 주소가 192.168.0.10이기 때문에 현재 Linux PC와 통신할 수 있습니다. 그러나 RasPi가 인터넷의 무언가에 액세스하려고 하면 추가 라우팅을 위해 192.168.0.11로 패킷을 보내려고 합니다. 하지만 RasPi 네트워크 측 Linux PC의 주소는 192.168.0.10이므로,11호, Linux PC는 RasPi의 나가는 패킷을 절대 수신하지 않으므로 라우팅할 수 없습니다.

이것은 잘못된 것입니다. RasPi의 라우터/게이트웨이 주소는 192.168.0으로 설정되어야 합니다..10, .11이 아닙니다.

gateway 192.168.0.11Linux PC의 구성에서 지정할 때 Linux PC가 자체 주소를 enx00249b233bda선언해야 한다는 의미는 아닙니다 ..11다른.11주소가 인터넷에 연결된 RasPi 네트워크의 시스템입니다 .

이것은 잘못된 것입니다. Linux PC에는 gateway구성 라인이 필요하지 않습니다 .enx00249b233bdaRasPi 네트워크에 대한 게이트웨이입니다. gateway인터페이스 구성에서 이 줄을 제거하거나 주석 처리 해야 합니다 enx00249b233bda.

왜 이것이 필요한지 모르겠습니다 ip route add. 네트워크 인터페이스를 구성하기만 하면 192.168.0.0/24 네트워크에 대한 경로가 자동으로 생성되며 이는 귀하의 요구에 충분합니다. 모든 명령을 주석 처리하고 ip route add재부팅한 후 계속 읽으십시오.

공용 IP 주소가 하나뿐이므로 Linux PC에서 IP 매스커레이딩을 설정해야 합니다. 간단히 말하면 iptables다음과 같이 됩니다.

iptables -w -t nat -A POSTROUTING -s 192.168.0.0/24 -o enp0s31f6 -j MASQUERADE

그런 다음 RasPi 네트워크에서 외부 세계로 IP 전달을 활성화하고 반환된 응답 패킷을 수락하려면 몇 가지 매우 기본적인 규칙이 필요합니다.

iptables -w -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -w -t filter -A FORWARD -i enx00249b233bda -j ACCEPT

특별한 연결 추적 도우미가 필요한 일부 프로토콜의 경우 다음과 같은 줄을 추가해야 할 수도 있습니다(누군가가 이를 남용하는 방법을 찾을 때까지 자동으로 수행되었습니다. 이것이 바로 우리가 좋은 일을 할 수 없는 이유입니다... 불평합니다. . ....):

iptables -w -t raw -A PREROUTING -i enx00249b233bda -p tcp --dport 21 -j CT --helper ftp

이렇게 하면 RasPi 네트워크에서 인터넷으로 나가는 FTP 제어 연결에 필요한 특수 처리가 활성화됩니다. 특수 처리는 FTP 제어 연결을 수신하고 해당 데이터 연결이 자동으로 통과하도록 허용합니다. 비슷한 처리가 필요할 수 있는 다른 시나리오도 있습니다.

FTP 외에도 특별한 처리가 필요한 다른 프로토콜은 다음과 같습니다.

  • SNMP(UDP 포트 161, 보조자 이름 snmp)
  • SIP(TCP 및 UDP, 포트 5060, 보조자 이름 sip)
  • IRC 채팅(TCP, 포트 번호는 다를 수 있음, 보조자 이름 irc)

(우분투에 이 기능이 있다는 것을 알고 있지만 ufw이를 사용하여 동등한 방화벽 규칙을 설정하는 방법을 모르겠습니다. 다른 사람이 알고 있다면 여기에서 자유롭게 편집하십시오.)

위의 모든 조치는 완전히 효과가 없습니다.활성화할 때까지IPv4 라우팅 마스터 스위치. 먼저 /etc/sysctl.conf파일에 다음 줄이 포함되어 있는지 확인하세요.

net.ipv4.ip_forward=1

그런 다음 재부팅하거나 다음 명령을 실행하면 설정이 즉시 적용됩니다.

sudo sysctl -p

(이 마스터 스위치가 존재하는 이유는 무엇입니까? 기본적으로 시스템을 라우터로 구성하는 사람은 누구나 "자신의 작업을 수행"할 가능성이 더 높으므로 네트워크에서 라우팅 루프나 기타 어리석은 일이 발생하지 않을 가능성이 있습니다.)

관련 정보