我使用firewalld将传入端口从互联网(9999)转发到本地LAN IP地址(100.1.1.1),如下所示:
external (active)
target: default
icmp-block-inversion: no
interfaces: tailscale0
sources:
services: ssh
ports: 9999/tcp
protocols:
forward: yes
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports: 9999/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
port=9999:proto=tcp:toport=9999:toaddr=100.1.1.1
source-ports:
icmp-blocks:
rich rules
LAN IP (100.1.1.1) 来自同一计算机上运行的 Tailscale (VPN) 接口,该接口通过 Internet 将流量传送到另一台计算机。
转发工作正常,但我的问题是,在目标计算机上,所有流量似乎都来自 100.1.1.1 (Tailscale),而不是原始源 IP。这对于诸如fail2ban 或统计之类的事情来说并不方便。
有没有办法保留源地址,同时仍然允许转发流量?
编辑:根据这篇文章https://mghadam.blogspot.com/2020/05/forward-traffic-from-public-ip-to.html?m=1应该是可以的,但是很复杂。
答案1
在外部区域中禁用伪装并转发到端口 9999 将采用经典方式,就像在许多路由器中一样,您将看到真实的客户端地址。
禁用伪装命令:
firewall-cmd --permanent --zone=external --remove-masquerade
如果您需要为外部区域共享互联网,请为公共启用伪装:
firewall-cmd --permanent --zone=public --add-masquerade