다음 설정이 있습니다. 노드 1과 노드 2는 LAN에 있습니다. 둘 다 eth0 네트워크 카드를 사용하여 LAN에 연결합니다. 둘 다 데비안 시스템입니다. 또한 node1은 wlan0 네트워크 카드를 사용하여 인터넷에 연결합니다. 노드 1과 노드 2 모두 인터넷에 액세스할 수 있을 것으로 예상합니다.
이 설정으로는 인터넷에 접속할 수 없습니다. 커널 IP는 라우터에 기본 규칙을 표시합니다.
기본적으로 두 가지 문제가 있습니다.
질문 1:
노드 1에서
이 설정을 사용하면 node1:kernel ip 테이블에 eth0을 통한 기본 규칙이 표시됩니다. 따라서 router1/LAN에 연결하세요. IP 경로 del을 시도하고 새로운 기본 규칙 장치 wlan0을 추가했습니다. IP 테이블은 좋아 보입니다(적어도 wlan0을 통해 기대할 수 있는 기본 규칙). 하지만 여전히 인터넷에 연결되어 있지 않습니다. 질문 1: 시스템 동작을 변경하기 위해 기본 규칙을 제거하고 추가하는 올바른 방법입니까? 패킷을 보낼 장치를 선택해야 합니다. 아니면 추가 구성이 필요합니다.
이제 호기심에 개발자를 뒤집었습니다. wlan0 네트워크 카드가 이제 LAN에 연결되어 있고 eth0이 router2(외부 네트워크)에 연결되어 있음을 나타냅니다. ip 테이블에는 eth0의 기본 규칙이 표시됩니다. 이번에는 eth0이 router2에 연결되고 인터넷에 연결됩니다. 핑, 탐색 등을 수행할 수 있습니다. 질문 2: eth0은 항상 기본 규칙에 사용됩니까? 다른 네트워크 카드로 변경하는 방법 이것은 wlan0입니다.
질문 2:
노드 2에서
하지만 노드 2부터 시작하면 노드 2에서 인터넷 연결이 이루어지지 않기 때문에 이 성공은 더 이상 지속될 수 없습니다. 이는 정적 구성이며 GW를 노드 1의 IP 주소라고 합니다.
질문 3: 이것이 맞나요? 아니면 node1 또는 router-2에서 SNAT 또는 MASQRADE 유형 구성을 수행해야 합니까? 인터넷 연결을 위해 여기서 누락된 것은 무엇입니까?
위의 시나리오에 대해 몇 가지 설명을 제공했습니다. 아직 댓글을 달 권한이 없기 때문에 일부 댓글에 대한 설명도 포함됩니다.
노드 2(LAN에 더 많은 시스템이 있는 경우)에서의 인터넷 액세스는 노드 1을 통해서만 가능합니다. LAN 라우터(router-1)에는 dhcp가 활성화되어 있고 모든 노드가 해당 클라이언트입니다. 인터넷 라우터 2와 동일합니다.
따라서 이 경우 node-1에 특별한 구성이 필요합니까?
노드 1에서 IP 라우팅: 기본값은 dev eth0을 통해 설정됩니다. 노드 2에서 IP 라우팅: 기본값은 dev eth0을 통해 설정됩니다.
또 다른 까다로운 질문(그러나 덜 중요한 점은 eth0을 사용하여 인터넷 라우터에 연결하면 이 문제를 해결할 수 있다는 것입니다)입니다. 저는 왜 기본적으로 항상 eth0을 통해 연결되는지 물었습니다. wlan0에 연결된 게이트웨이를 강제로 사용하려면 어떻게 해야 합니까(제 경우). 내 기본 제거/추가가 작동하지 않습니다.
답변1
추가 정보가 없어도 노드 1이나 노드 2에는 SNAT나 MASQUERADE가 필요하지 않다는 것을 이미 알 수 있습니다. 이는 인터넷에 연결된 시스템(아마도 라우터)을 통해 수행되어야 합니다.
그러나 노드 2의 트래픽이 노드 1을 통해 라우팅되어야 하는 경우 노드 1은 노드 2에 대한 SNAT 또는 MASQUERADE를 수행해야 합니다(노드 1에 대한 게이트웨이/라우터에 의해 수행되는 SNAT/MASQUERADE에 추가로).
답변2
Node-1에서 IP 전달을 활성화했습니까? 노력하다:
sysctl -w net.ipv4.ip_forward=1
작동하는 경우 /etc/sysctl.conf에 다음 행을 추가하여 영구적으로 만드십시오
net.ipv4.ip_forward = 1
(0으로 설정한 유사한 행이 제거되거나 주석 처리되었는지 확인하십시오).
답변3
여기서는 LAN의 모든 인터넷 트래픽이 노드 1을 통과해야 한다고 가정합니다(귀하의 목표). IP4만 사용합니다. 언급한 대로 노드 1은 이미 인터넷에 연결되어 있습니다.
노드 2에서: 커널 IP 테이블 기본 규칙은 노드 1로 GW를 갖고 dev eth0을 사용해야 합니다.
노드 1: 위의 가정에 따라 기본 규칙은 GW를 "라우터 2" dev eth0으로 설정해야 합니다.
또한 다음 사항이 true이거나 추가되어야 합니다. 1) IP_FORWARD 플래그.
ipv4.ip_forward flag must be set to 1. (use sysctl or change the sysctl conf file variable)
# sysctl -w net.ipv4.ip_forward="1"
참고: 재부팅 후에도 유지되지 않습니다.
2) 필터링 테이블에 IP 전달 규칙을 추가합니다. 이렇게 하면 장치 eth1의 모든 트래픽이 eth0으로 전달됩니다.
# iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
3) 나가는 IP 차단
Qu: 라우터 2에서 인터넷으로 트래픽을 보내기 위해 노드 1에서 나가는 IP를 마스킹해야 하는 강력한 필요성이 있다면 누가 이 MASQUERADE를 수행할까요? 답변: Router-2는 기본적으로 이 작업을 수행합니다.
Qu: 그러면 라우터-2를 노드 2나 LAN의 다른 컴퓨터와 함께 사용할 수 없는 이유는 무엇입니까?
답변: 노드 2와 다른 노드는 라우터 2의 도메인에 속하지 않기 때문입니다. 이 경우 노드 1은 LAN에 연결된 다른 모든 노드에 대해 명시적으로 MASQUERADING을 수행해야 합니다. 따라서 이 단계입니다.
# iptables -nat -A POSTROUTING --out-interface eth0 -j MASQUERADE
# iptables save
이제 노드 2 또는 LAN에 연결된 다른 시스템에서 인터넷에 연결할 수 있습니다.
노트:그러나 노드 1이 다시 시작된 후에는 위의 내용이 유지되지 않습니다. 마지막으로 만드는 방법은 다루지 않겠습니다.
알아채다:router-2의 NIC가 wlan0인 경우, AP(router-2)가 MASQURADE node-2 패킷을 거부할 수 있으므로 위의 방법이 작동할지 확신할 수 없습니다. eth0@node-1의 mac id는 AP에 등록되어 있지 않기 때문에 wlan0과 다릅니다. 여기서는 eth0 패킷의 mac 주소를 wlan0 주소로 명시적으로 변경해야 합니다. 알려줘요.