두 서브넷이 장치를 통해 서로 통신(핑)할 수 있도록 시스템의 네트워크를 조정하려고 합니다. 설정은 다음과 같습니다:
(192.168.1.128) (172.16.248.223)
Router <------> PC <---------> Device 1 <--------> Device 2
(172.16.248.248) (10.0.1.1) (10.0.1.2)
PC에는 게이트웨이가 172.16.248.254인 DNS 프록시가 있습니다. PC는 장치 1과 인터넷을 공유하고, 장치 1은 장치 2와 인터넷을 공유합니다. 이는 IP 라우팅을 통해 이루어지지만 PC는 장치 2를 ping할 수 없습니다. 이것은 내 설정에도 필요합니다. 장치는 USB(cdc_ncm 드라이버)를 사용하여 인터넷을 공유합니다.
경로는 다음과 같습니다.
컴퓨터에서:
default via 192.168.1.1 dev eno1 proto static metric 100
10.0.1.0/24 via 172.16.248.248 dev usb0
172.16.248.0/24 dev usb0 proto kernel scope link src 172.16.248.248
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.128 metric 100
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.128 metric 202
장치 1에서:
default via 172.16.248.254 dev eth1
10.0.1.0/24 dev usb1 proto kernel scope link src 10.0.1.1
172.16.248.0/24 dev eth1 proto kernel scope link src 172.16.248.223
장치 2에서:
default via 10.0.1.1 dev usb0
10.0.1.0/24 dev usb0 proto kernel scope link src 10.0.1.2
172.16.248.0/24 via 10.0.1.1 dev usb0
또한 장치 1의 usb0 인터페이스에는 macvlan 인터페이스 eth1이 있습니다. 이 설정에서는 인터넷 연결이 제대로 작동하지만 PC가 장치 2를 ping할 수 없습니다. 그러나 PC는 장치 1을 ping할 수 있고 장치 1은 장치 2를 ping할 수 있습니다.
이를 시험해 보기 위해 모든 장치에서 iptables를 새로 고쳤습니다. 그러한 연결을 구현할 때 고려하겠습니다.
PC에서 장치 2를 ping하도록 설정할 수 있습니까? 내가 여기서 무엇을 놓치고 있는 걸까요?
편집하다: 모든 장치에는 IP 라우팅이 활성화되어 있습니다. 혼란을 피하기 위해 질문을 바꿔보겠습니다. 물리적 인터페이스(USB)를 사용하여 세 개의 장치를 연결하고 싶습니다. 모든 장치가 PC의 인터넷 연결을 공유할 수 있고 모든 장치가 서로 핑할 수 있기를 원합니다. 다음 콘텐츠를 갖고 싶습니다.
장치 2의 서브넷이 다른 것은 중요하지 않지만 서브넷이 없으면 인터넷 연결이 작동하지 않습니다. 이를 달성하려면 조언이 필요합니다. 내 컴퓨터와 인터넷을 공유하는 라우터 외에 다른 라우터가 없습니다.
답변1
"공유 인터넷"이라는 용어에 주의하세요. 일반적으로 여기에는 일종의 NAT(Network Address Translation)가 포함됩니다. 나는 이것이 귀하의 설정에 해당되지 않는다고 가정합니다.
172.16.248.254에서 DNS 프록시를 언급했지만 네트워크에 연결하는 방법이 명확하지 않습니다. 나는 다음과 같은 네트워크 다이어그램을 가정할 것입니다(해석이 잘못된 경우 정정해 주십시오).
192.168.1.0/24 172.16.248.0/24 10.0.1.0/24
| | |
Router | | |
192.168.1.1 --| 172.16.248.248 --|-- 172.16.248.223 |
| PC | Device 1 |
|-- 192.168.1.128 | 10.0.1.1 --|
| | |-- 10.0.1.2
| 172.16.248.254 --| | Device 2
| DNS proxy | |
| | |
(서브넷을 중심으로 다이어그램을 구성하는 것이 좋습니다.) 특히 DNS 프록시가 라우터에 연결되어 있지 않습니다.
즉, 다음 경로가 필요합니다.
컴퓨터에서:
default via 192.168.1.1 dev eno1
10.0.1.0/24 via 172.16.248.233 dev usb0 # NOT .248 !!
172.16.248.0/24 dev usb0
192.168.1.0/24 dev eno1
장치 1에서:
default via 172.16.248.248 dev eth1 # NOT .254 !!
10.0.1.0/24 dev usb1
172.16.248.0/24 dev eth1
장치 2에서:
default via 10.0.1.1 dev usb0
10.0.1.0/24 dev usb0
또한 PC 및 장치 1에서 IP 전달을 활성화해야 합니다( echo 1 > /proc/sys/net/ipv4/ip_forward
루트 로서 sysctl
Google 등을 통해 영구적으로 설정할 수 있음).
지금은 macvlan 문제를 무시하겠습니다. 첫 번째 단계는 라우팅을 작동시키는 것입니다.
이 설정을 사용하면 PC, 장치 1, 장치 2 사이를 어떤 방향으로든 핑할 수 있습니다. 시험을 봐요. 모든 흥미로운 인터페이스의 새 xterm에서 디버깅, 실행 등을 수행 합니다 tcpdump -ni usb0
(따라서 인터페이스 중 4개가 세 장치 모두에 있습니다). 그런 다음 문제가 발생하면 패킷이 사라지는 위치를 확인할 수 있습니다. 커널이 경로가 어디로 가야 한다고 생각하는지 ip route get 1.2.3.4
알아내는 데에도 도움이 됩니다 .1.2.3.4