IP 라우팅이 작동하지 않습니다

IP 라우팅이 작동하지 않습니다

내 가상 머신에 대한 네트워크 브리지를 구성했습니다. VM은 호스트를 ping할 수 있지만 인터넷에서는 어떤 것도 ping할 수 없습니다. 내 구성:

# ip route
default via 192.168.1.100 dev wlp3s0 
192.168.1.0/24 dev wlp3s0  proto kernel  scope link  src 192.168.1.106  metric 600 
192.168.10.0/24 dev br0  proto kernel  scope link  src 192.168.10.1 

다리

# brctl show br0
bridge name     bridge id               STP enabled     interfaces
br0             8000.7a19fd532c51       no              tap0

IF 구성

# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.1  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::7819:fdff:fe53:2c51  prefixlen 64  scopeid 0x20<link>
        ether 7a:19:fd:53:2c:51  txqueuelen 1000  (Ethernet)
        RX packets 1206  bytes 110944 (108.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 296  bytes 28842 (28.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
enp2s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 44:a8:42:ea:5e:fb  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 1348  bytes 249670 (243.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1348  bytes 249670 (243.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
tap0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether fe:3f:76:37:c2:8a  txqueuelen 500 (Ethernet)
        RX packets 547  bytes 57652 (56.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 229  bytes 21306 (20.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.106  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::5ee0:c5ff:fe04:ec  prefixlen 64  scopeid 0x20<link>
        ether 5c:e0:c5:04:00:ec  txqueuelen 1000  (Ethernet)
        RX packets 5061  bytes 3500576 (3.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4400  bytes 684177 (668.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

IP 테이블

# Generated by iptables-save v1.4.21 on Wed Jan 20 03:24:28 2016
*nat
:PREROUTING ACCEPT [6064:511451]
:INPUT ACCEPT [12:3105]
:OUTPUT ACCEPT [2082:136342]
:POSTROUTING ACCEPT [771:53334]
-A POSTROUTING -o wlp3s0 -j MASQUERADE
COMMIT
# Completed on Wed Jan 20 03:24:28 2016
# Generated by iptables-save v1.4.21 on Wed Jan 20 03:24:28 2016
*mangle
:PREROUTING ACCEPT [25489:10605237]
:INPUT ACCEPT [18617:10028011]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [19284:2260048]
:POSTROUTING ACCEPT [19284:2260048]
COMMIT
# Completed on Wed Jan 20 04:20:44 2016
# Generated by iptables-save v1.4.21 on Wed Jan 20 04:20:44 2016
*filter
:INPUT ACCEPT [28:3026]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [22:1683]
-A FORWARD -i br0 -o wlp3s0 -j ACCEPT
-A FORWARD -i wlp3s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed Jan 20 04:20:44 2016

IP 전달:

# cat /proc/sys/net/ipv4/ip_forward
1

br0의 TCPDUMP

# tcpdump -i br0
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
03:28:56.847387 IP wordpress.dev > google.pl: ICMP echo request, id 1630, seq 2616, length 64
03:28:57.855523 IP wordpress.dev > google.pl: ICMP echo request, id 1630, seq 2617, length 64

wlp3s0의 TCPDUMP - br0의 패킷이 없습니다.

고쳐 쓰다

systemct 활성화 systemd-networkd 및 systemct 활성화 iptables를 활성화하여 브리지를 만들었습니다. "수동으로" 브리지를 만들면 모든 것이 잘 작동합니다.

/etc/systemd/network/LocalBridge.netdev

[NetDev]
Name=br0
Kind=bridge

/etc/systemd/network/LocalBridge.network

[Match]
Name=br0

[Network]
Address=192.168.10.1/24

/etc/systemd/system/iptables.service.d/10iptables.conf

[Service]
Environment="IPTABLES_INIT=/var/lib/iptables/init-IPv4.rules"
Environment="IP6TABLES_INIT=/var/lib/iptables/init-IPv6.rules"
Environment="COUNTERS=yes"

/var/lib/iptables/init-IPv4.rules 위의 "IP TABLES" 섹션과 동일합니다. /var/lib/iptables/init-IPv6.rules는 사용되지 않습니다.

어떤 아이디어가 있나요? 아니면 systemd를 사용하여 시스템 시작 시 초기 브리지를 올바르게 구성하는 방법은 무엇입니까?

답변1

필터 테이블의 FORWARD에 중요한 행이 누락되었습니다.

-A FORWARD -i wlp3s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br0 -o wlp3s0 -j ACCEPT

커널에서 브리징과 IP 전달을 활성화한다고 해서 트래픽이 마술처럼 이동하고 NAT가 적용되는 것은 아닙니다. iptables는 트래픽을 처리하는 방법을 알아야 합니다.

먼저 이 줄을 추가한 다음 여전히 문제가 있는 경우 추가로 문제를 해결하겠습니다.

답변2

저는 systemd-networkd가 단지 시작 시 인터페이스를 생성하는 것이라고 생각했는데, 그 이상의 의미가 있는 것 같습니다. 자체 라우팅 솔루션이 있으므로 무선 네트워크를 관리하는 데 필요한 NetworkManager와 함께 사용하면 안 됩니다. Systemd-networkd는 네트워크에 정적으로 연결된 서버 또는 컴퓨터용으로 설계되었습니다.

이제 나는 systemd-networkd를 사용하지 않기로 결정했습니다. 더 나은 해결책은 NetworkManager에서 브리지를 생성하여 자동으로 생성하는 것입니다.

문제가 해결되었습니다.

관련 정보