Raspberry Pi 4를 사용하여 포트 전달 프록시를 설정하려고 합니다.NF 테이블. 저렴한 가정용 NAT 라우터의 간단한 포트 전달 기능을 복제하고 싶습니다. 이것은 제가 개발 중인 대규모 원격 관리 애플리케이션의 구성 요소입니다.
이를 사용하여 호스트 자체의 포트를 리디렉션할 수 있습니다 redirect
. 하지만 호스트 외부로 아무것도 전달하도록 할 수는 없습니다.
라우팅을 활성화했습니다. 하지만 LAN 내에서도 작동하기를 원합니다. 나는 그것이 요인이라고 생각하지 않습니다.
보세요 journalctl
, 내 규칙이 실행되는 것 같습니다. 그러나 브라우저는 페이지를 표시하지 않습니다.
- 포트 80이 8088에서 로컬로 실행되는 웹 애플리케이션으로 리디렉션되고 있습니다. 이는 작동합니다.
- 포트 81은 프린터의 관리 화면으로 전달되어야 합니다.
- 포트 82가 외부 웹사이트로 전달을 시도하고 있습니다.
$ curl -i http://192.168.10.32:81
^C (no response)
$
로그 및 구성은 다음과 같습니다.
업데이트: 장치가 원래 WireGuard도 실행했다는 사실은 언급하지 않았습니다. 단순화하기 위해 WireGuard를 비활성화하고 구성과 로그를 다시 나열했습니다. 이제 이것은 매우 일반적인 구성입니다.
# nft list ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
ct state invalid drop
iifname "lo" accept
ip protocol icmp accept
tcp dport { ssh, 22222 } ct state new log prefix "[nftables] New SSH Accepted: " accept
tcp dport { http, https, 81, 82, omniorb } accept
pkttype { host, broadcast, multicast } drop
log prefix "[nftables] Input Denied: " flags all counter packets 0 bytes 0 drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority 100; policy accept;
masquerade
}
chain prerouting {
type nat hook prerouting priority -100; policy accept;
tcp dport http log prefix "redirect to 8088 " redirect to :omniorb
tcp dport 81 log prefix "pre redirect to printer " level debug dnat to 192.168.10.10:http
tcp dport 82 log prefix "redirect to web " dnat to 104.21.192.38:http
}
}
- 80을 8088 작품으로 리디렉션
- 프린터 및 네트워크로 전달이 작동하지 않음
Apr 17 13:59:48 douglas kernel: redirect to 8088 IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=20702 DF PROTO=TCP SPT=44984 DPT=80 WINDOW=64240 RES=0x00 SYN URGP=0
Apr 17 14:00:50 douglas kernel: pre redirect to printer IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=2569 DF PROTO=TCP SPT=34024 DPT=81 WINDOW=64240 RES=0x00 SYN URGP=0
Apr 17 14:00:51 douglas kernel: pre redirect to printer IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=2570 DF PROTO=TCP SPT=34024 DPT=81 WINDOW=64240 RES=0x00 SYN URGP=0
Apr 17 14:00:53 douglas kernel: pre redirect to printer IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=2571 DF PROTO=TCP SPT=34024 DPT=81 WINDOW=64240 RES=0x00 SYN URGP=0
Apr 17 14:00:59 douglas kernel: redirect to web IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36328 DF PROTO=TCP SPT=44326 DPT=82 WINDOW=64240 RES=0x00 SYN URGP=0
Apr 17 14:01:00 douglas kernel: redirect to web IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36329 DF PROTO=TCP SPT=44326 DPT=82 WINDOW=64240 RES=0x00 SYN URGP=0
Apr 17 14:01:02 douglas kernel: redirect to web IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36330 DF PROTO=TCP SPT=44326 DPT=82 WINDOW=64240 RES=0x00 SYN URGP=0
Apr 17 14:01:06 douglas kernel: redirect to web IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36331 DF PROTO=TCP SPT=44326 DPT=82 WINDOW=64240 RES=0x00 SYN URGP=0
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:ab:9c:76 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.32/24 brd 192.168.10.255 scope global dynamic noprefixroute eth0
valid_lft 603659sec preferred_lft 528059sec
inet6 fe80::2cd9:f195:bfe6:38e8/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether dc:a6:32:ab:9c:77 brd ff:ff:ff:ff:ff:ff
# ip route
default via 192.168.10.1 dev eth0 proto dhcp src 192.168.10.32 metric 202
192.168.10.0/24 dev eth0 proto dhcp scope link src 192.168.10.32 metric 202
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
답변1
하지만 전달이 비활성화되어 있기 때문에 현재 설정이 작동하지 않습니다.
# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1
왜냐하면필터 후크 포워드 유형체인은 다음과 같이 설정됩니다 policy drop
.
chain forward { type filter hook forward priority 0; policy drop; }
일부 시스템이 실수로 모든 것을 전달하는 대신 RPi4를 게이트웨이로 설정한 경우 전달을 제한하려는 경우(위 정책을 에서 로 변경하거나 drop
완전히 accept
제거하여)앞으로체인)을 거친 것만 전달하도록 선택할 수 있습니다.DNA번역하다:
nft add rule inet filter forward ct status dnat accept
이 정보는 생성된 고유한 conntrack 조회 항목에 저장되므로(그리고 양방향 및 각 패킷에 사용됨) 흐름의 모든 패킷에 충분합니다.