내 테스트 벤치에는 enp2s0과 enp3s0이라는 2개의 인터페이스가 있는 PC가 있습니다. IP는 공용이며 인터페이스 MAC을 기반으로 DHCP를 통해 획득됩니다. 내 작업대에는 두 번째 컴퓨터인 Raspberry Pi Compute Module 3이 있는데, 이 컴퓨터를 인터넷에 게시하고 싶습니다. RPi와 데스크톱 서버는 PPP 및 직렬 연결을 통해 연결됩니다. 양쪽의 ppp 인터페이스를 ppp0이라고 합니다.
공용 IP에서 RPi CM3+에 액세스하기 위해 ppp0과 enp3s0을 연결하는 방법은 무엇입니까? Linux의 수많은 브리징 및 터널링 옵션에 길을 잃었습니다...
우리 조직에서는 스위치 라우팅이나 사용을 허용하지 않습니다. 나머지 네트워크가 손상될 가능성을 최소화하는 솔루션이라면 무엇이든 좋습니다.
답변1
제3의 공용 IP나 VPN 없이도 제가 원하는 것을 달성할 수 있었습니다.
저는 광범위한 규칙에 따라 DNAT와 SNAT를 사용합니다. 많은 소스에서 MASQUERADE 사용을 권장하지만 여러 인터넷 연결 인터페이스를 사용할 수 있는 경우 메트릭이 낮은 인터페이스는 로컬 및 PPP 트래픽을 모두 가져오고 라우팅을 방해합니다. MASQUERADE는 특정 소스 IP 지정을 허용하지 않지만 SNAT는 허용합니다.
다음 iptables 규칙을 추가했습니다.
-A FORWARD -i enp3s0 -o ppp0 -j ACCEPT
-A FORWARD -i ppp0 -o enp3s0 -j ACCEPT
-t nat -A PREROUTING -i enp3s0 -j DNAT --to-destination 10.0.5.2
-t nat -A POSTROUTING -s 10.0.5.2 -j SNAT --to-source <enp3s0's ip>
IP 전달이 활성화되었습니다:
echo 1 > /proc/sys/net/ipv4/ip_forward
이상적으로는 스크립트가 DHCP 구성 후에 SNAT 규칙 소스 IP를 구성합니다. 제 경우에는 IP가 무기한 귀속되므로 정적 규칙이 괜찮습니다.
편집: dirkt의 제안에 따라 잘못된 인터페이스에서 일부 나가는 패킷을 캡처하여 새 네트워크 네임스페이스를 추가했습니다. 인터페이스를 여는 전체 스크립트는 이제 다음과 같습니다.
ip netns add bridged
ip link set enp3s0 netns bridged
ip netns exec bridged ip link set dev enp3s0 up
ip netns exec bridged dhclient enp3s0
ip netns exec bridged iptables -A FORWARD -i enp3s0 -o ppp0 -j ACCEPT
ip netns exec bridged iptables -A FORWARD -i ppp0 -o enp3s0 -j ACCEPT
ip netns exec bridged iptables -t nat -A PREROUTING -i enp3s0 -j DNAT --to-destination 10.0.5.2
ip netns exec bridged iptables -t nat -A POSTROUTING -s 10.0.5.2 -j SNAT --to-source [my internet ip]
ip netns exec bridged echo 1 > /proc/sys/net/ipv4/ip_forward
stty -F /dev/ttyUSB1 raw
stty -F /dev/ttyUSB1 1000000
ip netns exec bridged pppd /dev/ttyUSB1 1000000 10.0.5.1:10.0.5.2 local noauth debug nodetach dump nocrtscts passive persist maxfail 0 holdoff 1
DHCP가 기본적으로 새 네임스페이스에서 실행되지 않는 이유는 확실하지 않지만 이제는 dhclient를 한 번만 호출하면 됩니다.
방화벽은 네임스페이스에서만 꺼집니다.
sudo ip netns exec bridged ufw disable
답변2
IP는 공용이며 인터페이스 MAC을 기반으로 DHCP를 통해 획득됩니다.
이는 브리징 시 ppp 인터페이스가 DHCP를 통해 세 번째 공용 IP를 얻어야 함을 의미합니다. 이것은 ppp에서는 작동하지 않습니다.
브리지ppp0
ppp0에는 공용 IP가 필요하지 않지만피어 투 피어이름에서 알 수 있듯이 연결입니다. 그래서 다리를 놓을 수 없습니다.
그러면 공용 IP에서 RPi CM3+에 액세스할 수 있습니까?
가장 쉬운 방법은 벤치 PIC에서 전달을 활성화하고, 외부 NIC에서 NAT ppp0을 활성화하고, 포트 전달 규칙을 추가하는 것입니다. (구글에는 수백 개의 튜토리얼이 있습니다). 이것은 의미한다일부RPi의 포트는 지정된 외부 IP 또는 다른 포트 번호에서 액세스할 수 있습니다. Rpi에 액세스할 수 있습니다.모두인터넷. 이는 액세스가 필요한 알려진 수의 서비스가 Rpi에서 실행 중인 경우 작동합니다.
RPI인 경우가지다세 번째 공용 IP를 가지려면 ppp0 연결 위에 브리지 가능한 VPN을 추가한 다음(이로 인해 추가 오버헤드가 발생함) 결과 tun/tap 인터페이스를 브리지합니다.