iptables를 사용하지 않고 인터페이스 간에 패킷을 전달하고 싶습니다. 나는 iptables 자체에 반대하는 것이 아니라 단지 내 단순한 요구 사항에 불필요하다고 생각할 뿐입니다. 하지만 나는 이것을 할 수 없습니다. 할 수 있나요?
시나리오는 다음과 같습니다. 호스트 A에 무선 인터페이스와 유선 인터페이스가 있습니다. 내 무선 게이트웨이의 IP는 10.0.0.1입니다. 내 무선 인터페이스는 10.0.0.12입니다.
그래서 sysctl을 사용하여 포트 전달을 활성화하고 유선 인터페이스용 네트워크에 IP를 생성한 다음 유선 인터페이스에 연결된 호스트(호스트 B라고 부르겠습니다)에 대한 경로 테이블 항목을 생성하면 모든 것이 해결될 것이라고 생각했습니다. 괜찮을 거야 알았지?
그래서 나는 가지고있다:
- 무선 전화:
- 게이트웨이==10.0.0.1
- 호스트 A 인터페이스==10.0.0.12
- 호스트 A 넷마스크 == 255.255.255.0
- 열광한:
- 호스트 A 인터페이스==10.0.0.99
- 호스트 B 인터페이스 == 10.0.0.100, 호스트 A에 연결됨
- 넷마스크가 255.255.255.255인 호스트 B에 대한 라우팅 테이블 항목입니다.
호스트 A에서 호스트 B로 ping 및 ssh를 실행할 수 있습니다. 그러나 호스트 B에서 게이트웨이를 ping하려고 하면 호스트 A의 유선 인터페이스에서 다음과 같은 내용을 많이 볼 수 있습니다.
12:56:55.211866 ARP, Request who-has gateway tell 10.0.0.100, length 46
12:56:56.211751 ARP, Request who-has gateway tell 10.0.0.100, length 46
12:56:57.214187 ARP, Request who-has gateway tell 10.0.0.100, length 46
12:56:58.211834 ARP, Request who-has gateway tell 10.0.0.100, length 46
...
뭔가 빠졌나요? 아니면 iptables가 필요한가요?
이것은 호스트 A의 라우팅 테이블입니다.
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 wlp3s0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlp3s0
10.0.0.100 0.0.0.0 255.255.255.255 UH 0 0 0 enp0s25
광고 감사합니다 Vance!
그런데, 호스트 A에서:
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
답변1
동일한 주소 공간을 가진 2개의 서로 다른 네트워크 블록이 있을 수 없습니다. 따라서 ip_forward=1이 라우팅에 사용되므로 ip_forward를 실행하는 것은 쓸모가 없습니다. 따라서 두 네트워크 블록에서 서로 다른 네트워크를 사용하거나 실제로 이 설정을 원하는 경우 브리지를 설정하십시오.
데비안의 경우
$sudo apt-get install bridge-utils
vi /etc/network/interfaces
allow-hotplug wlan0
iface wlan0 inet manual
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
bridge_ports eth0 wlan0
address 10.0.0.1
netmask 255.255.255.0
$sudo service networking restart