참고: 클라이언트 장치(
computer B
이 예에서는)가 게이트웨이 시스템을 통해 인터넷에 연결하려는 경우 이름 서버 확인을 구성해야 할 수도 있습니다. 여기서는 이에 대해 설명하지 않습니다(게이트웨이가 반드시 인터넷을 제공하는 것은 아닙니다).
네트워크 라우팅의 기본을 이해하려고 합니다.
그래서 나는 이것을 내 LAN에서 시도하고 있습니다(지금은 인터넷이 필요하지 않고 LAN 통신만 필요합니다).
네트워크 구성 문제가 꽤 복잡한 건 알지만 그냥 컴퓨터를 만들고 싶어요(예: A)게이트웨이 역할을 하세요다른 하나(예: B)(둘 다 Ubuntu Linux를 실행함).
A만이 액세스할 수 있는 라우터에 액세스하려면 B만 필요합니다.
상황은 이렇습니다.
Router for computer A --> 192.168.0.1
Computer A - eth0 --> 192.168.0.2
Computer A - eth1 --> 192.168.1.1
Computer B - eth0 --> 192.168.1.2
컴퓨터연결매우 좋은라우터.
컴퓨터A와 B연결 상태 양호(ping, SSH...등)그들 사이에.
컴퓨터 B는 할 수 있다라우터에 연결할 수 없습니다.컴퓨터 A의 경우
컴퓨터 B에 추가하면 될 것 같았어요.A를 기본 게이트웨이로 사용활성화하고A의 IP 전달B가 A의 라우터에 도달할 수 있도록 합니다.
luis@ComputerB:~$ sudo route add default gw 192.168.1.1
luis@ComputerB:~$ sudo routel
target gateway source proto scope dev tbl
127.0.0.0 broadcast 127.0.0.1 kernel link lo local
127.0.0.0 8 local 127.0.0.1 kernel host lo local
127.0.0.1 local 127.0.0.1 kernel host lo local
127.255.255.255 broadcast 127.0.0.1 kernel link lo local
192.168.1.0 broadcast 192.168.1.2 kernel link eth0 local
192.168.1.2 local 192.168.1.2 kernel host eth0 local
192.168.1.255 broadcast 192.168.1.2 kernel link eth0 local
default 192.168.1.1 eth0
169.254.0.0 16 link eth0
192.168.1.0 24 192.168.1.2 kernel link eth0
컴퓨터 A(중간 게이트웨이)에서:
root@ComputerA:~$ echo 1 > /proc/sys/net/ipv4/ip_forward
컴퓨터 B는 여전히 컴퓨터 A에 대해 ping을 수행할 수 있지만 A의 라우터는 응답하지 않습니다.
luis@ComputerB:~$ ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
^C
(핑 응답 없음)
이게 다야?올바른 절차Linux를 실행하는 한 컴퓨터가 간단한 방법으로 다른 컴퓨터에 대한 게이트웨이 역할을 하도록 하시겠습니까?
답변1
거의 다 왔습니다. 트래픽이 B로 돌아가는지 확인하기만 하면 됩니다. 이제 B에서 외부 세계로 트래픽을 전달했지만 A는 트래픽을 B로 다시 가져오는 방법을 모릅니다. 연결 전반에 걸쳐 일부 상태를 유지하려면 A가 필요합니다. 이렇게 하려면 활성화해야 합니다.네트워크 주소 변환. 첫 번째 단계를 완료하여 전달을 허용했습니다. 그런 다음 다음 명령을 사용하여 몇 가지 방화벽 규칙을 추가해야 합니다 iptables
.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
이것이 의미하는 바는: 네트워크 주소 변환 테이블에서 eth0(외부)으로 나가는 패킷의 경로를 파악한 후 반환 주소 정보를 우리 자신의 주소 정보로 대체하여 반환 패킷이 우리에게 도달하도록 한다는 것입니다. 또한 우리가 이 작업을 수행했다는 사실을 기억하세요(이 연결에 대한 조회 테이블을 기억하는 것과 같습니다).
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
eth1(내부 인터페이스)의 패킷이 eth0(외부 인터페이스)에서 나가는 것을 허용합니다.
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
이전 조회 테이블을 사용하여 외부 인터페이스에 도착하는 패킷이 실제로 내부에서 시작된 연결에 속하는지 확인하세요.
답변2
게이트웨이 역할을 하는 두 Linux 컴퓨터 간의 라우팅이 제대로 작동하려면 다음 사항을 충족해야 합니다.
- 두 게이트웨이 모두 서로 물리적 링크(또는 가상 머신을 연결하려는 경우 가상 링크)가 있어야 합니다.
라우터의 두 인터페이스 모두에 경로를 추가해야 합니다.
route add -net 192.168.0.0/24 gw 192.168.0.1 route add -net 192.168.1.0/24 gw 192.168.1.1
원격 네트워크의 두 게이트웨이 모두에 로컬 게이트웨이를 지정해야 합니다. 이를 통해 로컬 네트워크의 컴퓨터는 원격 네트워크로 패킷을 보낼 위치를 알 수 있습니다. 게이트웨이는 원격 네트워크로 패킷을 보내는 컴퓨터의 IP 주소여야 합니다.
- 네트워크 간에 트래픽을 전송하려는 컴퓨터는 원격 네트워크와의 트래픽을 처리하는 로컬 게이트웨이도 알아야 합니다. 이는 일반적으로 DHCP(Dynamic Host Control Protocol)를 통해 수행되지만 별도의 인터넷 게이트웨이를 사용하려는 경우 인터넷과 기타 네트워크에 액세스해야 하는 컴퓨터에서 모두 지정해야 합니다(예: DHCP 및 다른 네트워크 라우팅을 위한 게이트웨이).
- 두 게이트웨이 모두에 대해 IP 전달이 활성화되어 있어야 합니다.
게이트웨이 간에 NAT가 작동하려면 IP 매스커레이딩을 활성화해야 합니다.
modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth1 -j ACCEPT
매스커레이딩에 동일한 인터페이스를 사용하고 있으므로 소스와 대상을 지정해야 할 수도 있습니다.
iptables -t nat -A POSTROUTING -i eth0 -s 192.168.0.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
그리고 또 다른 게이트웨이:
iptables -t nat -A POSTROUTING -i eth1 -s 192.168.1.0/24 ! -d 192.168.0.0/24 -j MASQUERADE
각 게이트웨이에 대해 로컬 네트워크 트래픽은 다음과 같이 적절한 인터페이스에서 허용되어야 합니다.
iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -j ACCEPT
또는
iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -j ACCEPT
가지다많은 링크그리고비슷한 질문이는 귀하가 직면한 문제를 해결하는 데 참고 자료를 제공할 수 있습니다.
이 특별한 경우 문제는 두 시스템의 라우팅 및 게이트웨이 설정이 완료되지 않았고 iptables를 사용하여 NAT(Network Address Translation)가 활성화되지 않아 게이트웨이가 다른 서브넷에 있는 시스템의 요청을 호스팅할 수 있다는 것입니다. 그들을 대신하여.
연결의 한쪽 끝을 담당하기 때문에 인터넷 연결을 설정할 때도 중요합니다(예: Linux 컴퓨터를 PPPoE 연결의 게이트웨이로 사용).