Linux 两张网卡: eth0 和 eth1 sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE MASQUERADE(IP地址伪装) sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eno1 -j MASQUERADE 以下防火墙规则我没有弄懂 DNAT目的端口映射 劫持任何访问
P Masquerade 是 Linux 发展中的一种网路功能.如果一台 Linux 主机使用 IP Masquerade 功能连线到网际网路上,那麽接上它的电脑(不论是在同一个区域网路上或藉由数据机连线 这使得一些电脑可以隐藏在闸道(gateway) 系统後面存取网际网路而不被发现,看起来就像只有这个系统在使用网际网络 IP Masquerade 是如何运作的 SLIP/PPP +————+ +——— (参阅下述) 配合 ip_masquerade 及适当递送配置(routing configured) Anybox 这台机器可以跟网际网路交流就如同它真的连在上面般 (除了少数例外).
MASQUERADE,地址伪装,在iptables中有着和SNAT相近的效果,但也有一些区别: SNAT,DNAT,MASQUERADE都是NAT,MASQUERADE是SNAT的一个特例。 MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE。 如此配置的话,不用指定SNAT的目标ip了 不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去 这样就实现了很好的动态SNAT地址转换 注: 对于MASQUERADE,只是计算机的负荷稍微多一点。 因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。
原文发表在 http://shumh.net/posts/net/2022-10-14-masquerade/本文重点介绍 iptables MASQUERADE 动作实现原理,需要读者具备 iptables 如何选择源 IP前面聊了 MASQUERADE 的作用,现在终于到了本文的重点,当主机上配置多个 IP 地址时,MASQUERADE 如何从这些 IP 地址中选出一个合适的源 IP。 代码分析MASQUERADE 在 NAT 表中注册的钩子函数# net/netfilter/xt_MASQUERADE.cstatic struct xt_target masquerade_tg_reg (skb, xt_hooknum(par), &range, xt_out(par));}nf_nat_masquerade_ipv4 是核心函数,其中 MASQUERADE 选择源 IP 的逻辑就在其中 */return nf_nat_setup_info(ct, &newrange, NF_NAT_MANIP_SRC);}链路如下:masquerade_tg -> nf_nat_masquerade_ipv4
snat 源地址转换,改变数据包的源地址 dnat 目的地址转换,改变数据包的目的地址 masquerade IP伪装,只适用于ADSL等动态拨号上网的IP伪装,如果主机IP是静态分配的 在作出路由之前,对目的地址进行修改 POSTROUTING:SNAT、MASQUERADE (路由之后)只支持-o,不支持-i。 二、nat不同动作的配置 1)MASQUERADE:是动态分配ip时用的IP伪装:在nat表的POSTROUTING链加入一条规则:所有从ppp0口送出的包会被伪装(MASQUERADE) [root @localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 要想系统启动时自动实现nat,在/etc/rc.d/rc.local文件的末尾添加 如此配置的话,不用指定snat的目标ip了 不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做snat出去 这样就实现了很好的动态snat
MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。 MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。 比如下边的命令: iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE 如此配置的话,不用指定SNAT 的目标ip了,不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。
流量的路由【中继器不作改动 还用 iptables】 真正作用于用户访问内网地址的业务规则【在 VPN 中枢服务器 需要改变为 nft】 3. openvpn 权限控制原理 VPN 权限管理的核心是 masquerade ,从 VPN 虚拟 IP10.121.0.3 到 192.168.3.0/24 的 80 端口的流量,前者源地址被 masquerade 成本机地址,然后就成了本机发往 192.168.3.0/24 的数据包 add rule ip nat POSTROUTING oifname eth0 ip saddr 10.121.6.6 ip daddr 10.10.210.11 counter masquerade add rule ip nat POSTROUTING oifname eth0 ip saddr 10.121.6.6 ip daddr 10.10.210.18 counter masquerade -t nat -I POSTROUTING -s 10.121.0.3 -d 192.168.3.0/24 -o eth0 -p tcp --dport 80 -j MASQUERADE; 含义是虚拟
docker0 172.18.0.0/16 0.0.0.0/0 0 0 MASQUERADE all -- * ! 192.168.0.4 tcp dpt:7001 0 0 MASQUERADE tcp -- * * 192.168.0.4 192.168.0.4 tcp dpt:4001 0 0 MASQUERADE tcp -- * * 192.168.0.5 192.168.0.8 tcp dpt:8080 0 0 MASQUERADE tcp -- * * 172.18.0.4 172.18.0.2 tcp dpt:80 0 0 MASQUERADE tcp -- * * 172.18.0.6
firewall-cmd --query-masquerade # 检查是否允许伪装IP firewall-cmd --add-masquerade # 允许防火墙伪装IP firewall-cmd - -remove-masquerade# 禁止防火墙伪装IP 这是在网上找到的。 实际使用中,我采用的命令是: firewall-cmd --zone=public --add-masquerade --permanent 增加了--permanent参数,才不会重启失效。
删除: firewall-cmd --zone=work --remove-service=smtp IP地址伪装 # 查看: firewall-cmd --zone=external --query-masquerade # 打开: firewall-cmd --zone=external --add-masquerade # 关闭: firewall-cmd --zone=external --remove-masquerade 端口转发 # 打开端口转发,首先需要打开IP地址伪装 firewall-cmd --zone=external --add-masquerade # 转发 tcp 22 端口至 3753: firewall-cmd
interfaces: sources: services: ssh mdns samba-client dhcpv6-client ports: protocols: masquerade sources: services: ssh mdns samba-client dhcpv6-client http ports: 443/tcp protocols: masquerade [root@ds1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@ds1 ~]# firewall-cmd --zone=public --add-masquerade %% icmp-block-inversion: no interfaces: eth1 sources: services: ports: protocols: masquerade %% icmp-block-inversion: no interfaces: eth1 sources: services: ports: protocols: masquerade
LOCAL Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 172.18.0.0/16 0.0.0.0/0 MASQUERADE all -- 172.17.0.0/16 0.0.0.0 /0 MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:8006 MASQUERADE tcp -- 172.17.0.3 172.17.0.3 tcp dpt:8006 MASQUERADE tcp -- 172.17.0.4
anywhere 172.18.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE anywhere 10.0.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE LOCAL MASQUERADE all -- anywhere anywhere /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE
icmp-block-inversion: no interfaces: sources: services: ports: protocols: forward: yes masquerade 31021b17396b br-53a24802cca1 docker0 sources: services: ports: protocols: forward: yes masquerade : services: cockpit dhcpv6-client mdns samba-client ssh ports: protocols: forward: yes masquerade : services: cockpit dhcpv6-client mdns samba-client ssh ports: protocols: forward: yes masquerade interfaces: sources: services: dhcp dns ssh ports: protocols: icmp ipv6-icmp forward: no masquerade
interfaces: ens18 sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade icmp-block-inversion: no interfaces: sources: services: ports: protocols: forward: yes masquerade br-31021b17396b br-53a24802cca1 docker0 sources: services: ports: protocols: forward: yes masquerade icmp-block-inversion: no interfaces: sources: services: ports: protocols: forward: yes masquerade interfaces: sources: services: dhcp dns ssh ports: protocols: icmp ipv6-icmp forward: no masquerade
在作出路由之前,对目的地址进行修改 POSTROUTING:SNAT、MASQUERADE (路由之后)只支持-o,不支持-i。 二、nat不同动作的配置 1)MASQUERADE:是动态分配ip时用的IP伪装:在nat表的POSTROUTING链加入一条规则:所有从ppp0口送出的包会被伪装(MASQUERADE) [root @localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 要想系统启动时自动实现nat,在/etc/rc.d/rc.local文件的末尾添加 >/proc/sys/net/ipv4/ip_forward [root@localhost]# /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
192.168.1.1 改变指定的接口到其他区域 --change-interface=eth1 确定该网卡接口是否存在于此区域 --query-interface=eth1 开启SNAT(源地址转换) --add-masquerade 查询SNAT的状态 --query-masquerade 开启SNAT(源地址转换) --add-masquerade 端口转发,本地513到其他机器的22端口,要开启masquerade --add-forward-port
localhost.domain代发问题 方法一:修改hostname为个人域 方法二:伪装成user@domain.com 执行以下命令: /etc/mail/sendmail.mc 打开后编辑文件,在末端加入以下内容: MASQUERADE_AS (gongzi.me)dnl FEATURE(masquerade_envelope)dnl FEATURE(masquerade_entire_domain)dnl MASQUERADE_DOMAIN
nft add rule ip nat POSTROUTING oifname eth0 ip saddr 10.121.6.6 ip daddr 192.168.5.71 counter log masquerade nft add rule ip nat POSTROUTING oifname eth0 ip saddr 10.121.6.6 ip daddr 10.10.210.9 counter log masquerade handle 7 oifname "eth0" ip saddr 10.121.6.6 ip daddr 192.168.5.71 counter packets 1 bytes 60 log masquerade # handle 27 oifname "eth0" ip saddr 10.121.6.6 ip daddr 10.10.210.9 counter packets 0 bytes 0 log masquerade add rule ip nat POSTROUTING oifname eth0 ip saddr 10.11.6.6 ip daddr 10.10.210.18 counter masquerade
:在A机器的nat表中增加一条规则 [root@adai003 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE all -- * ens33 192.168.100.0/24 0.0.0.0/0 说明: -o 选项后面跟设备名称,表示出口网卡,MASQUERADE是伪装、冒充的意思 MASQUERADE(伪装) 假如当前系统用的是ADSL/3G/4G动态拨号方式,那么每次拨号,出口IP都会改变,SNAT就会有局限性。 “iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE” 重点在MASQUERADE这个设定值就是将动态IP伪装成为 (-o)的那块装置上的IP,不管现在eth0的出口获得了怎样的动态IP,MASQUERADE会自动读取eth0设定的IP地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。