扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
iptables -t nat -vnL是什么命令?
成都创新互联是一家专业提供临安企业网站建设,专注与成都网站设计、成都做网站、H5页面制作、小程序制作等业务。10年已为临安众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
用详细方式列出 nat 表所有链的所有规则,只显示 IP 地址和端口号
iptables -L
粗略列出 filter 表所有链及所有规则
iptables -t nat -vxnL PREROUTING
用详细方式列出 nat 表 PREROUTING 链的所有规则以及详细数字,不反解
iptables -t nat -F PREROUTING
-F: FLASH,清空规则链的(注意每个链的管理权限)
PREROUTING (路由前)
-t nat:显示所有的关卡的信息
iptables -t nat -F 清空nat表的所有链
iptables -t nat -F PREROUTING 清空nat表PREROUTING链
iptables -t nat -vnL | grep SNAT | awk -F : {'print $2'} 得到snat ip
iptables -t nat -D POSTROUTING -o eth1 -j SNAT --to ${snat_ip} 删除所有源地址转换表项
iptables -t nat -A PREROUTING -i %{G_HOST_IF0_0_0} -p tcp --dport %{G_TESTBED_SELENIUM_DPORT} -j DNAT --to %{G_PROD_IP_BR0_0_0}:80 添加源转换表项
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to ${ip} 添加目的转换表项
iptables -t nat -vnL 察看定义规则的详细信息
-t 指定命令要操作的匹配包的表
-A 是新增的意思
-s 用来比对封包的来源 IP
-j 指定规则的目标
-A 后面的选项有INPUT OUTPUT FORWARD
这句话的意思是:更改所有来自10.50.10.0/24的数据包的源ip地址为192.168.79.129
1. 配置IP地址 1.1 正确配置学校分配的IP使能正常上网 1) 按学校分配的IP地址配置好Linux主机 [~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0 BOOTPROTO=none HWADDR=00:1E:90:13:E0:25 IPADDR=10.3.10.19 NETMASK=255.255.255.0 GATEWAY=10.3.10.254 ONBOOT=yes TYPE=Ethernet DNS1=211.64.120.2 DEFROUTE=yes DOMAIN=168.96.1.1 2) 重起网卡 [~]# servie network restartnote: 经过以上的配置, Linux主机应该能够正常上网了!1.2 新增eth0别名设备eth0:0 [~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0# eth0:0 必须要用''括起来: 'eth0:0' DEVICE='eth0:0' ONBOOT=yes BOOTPROTO=static IPADDR=192.168.50.1 NETMASK=255.255.255.0 USERCTL=no 1.3 配置后 查看一下是否配置成功: [~]# ifconfigeth0 Link encap:Ethernet HWaddr 00:1E:90:13:E0:25 inet addr:10.3.10.19 Bcast:10.3.10.255 Mask:255.255.255.0 inet6 addr: fe80::21e:90ff:fe13:e025/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:187685 errors:0 dropped:0 overruns:0 frame:0 TX packets:137327 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:134816893 (128.5 MiB) TX bytes:56066393 (53.4 MiB) Interrupt:27 Base address:0xa000 eth0:0 Link encap:Ethernet HWaddr 00:1E:90:13:E0:25 inet addr:192.168.50.1 Bcast:192.168.50.255 Mask:255.255.255.0 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 Interrupt:27 Base address:0xa000 2. 配置路由 由于在配置网卡接口时, 已自动配置一定的路由, 所以我们只需查看一下其信息, 验证其 是否已经被正确配置: [root ~]$ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.50.0 * 255.255.255.0 U 0 0 0 eth010.3.10.0 * 255.255.255.0 U 1 0 0 eth0link-local * 255.255.0.0 U 1002 0 0 eth0default 10.3.10.254 0.0.0.0 UG 0 0 0 eth03. 配置NAT 1) 新建nat.sh脚本文件并保存在 /usr/local/nat/ 目录下: [~]# cat /usr/local/nat/nat.sh#!/bin/bash # 0. 设定你的参数值 EXIF='eth0' # 这个是对外的网卡接口, 可能是'ppp0'等 EXNET='192.168.50.0/24' # 这个是对内的网段 # 底下如无需要, 请不要改动了! # 1. 启动routing等 echo 1 /proc/sys/net/ipv4/ip_forward /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z /sbin/iptables -F -t nat /sbin/iptables -X -t nat /sbin/iptables -Z -t nat /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT /sbin/iptables -t nat -P PREROUTING ACCEPT /sbin/iptables -t nat -P POSTROUTING ACCEPT /sbin/iptables -t nat -P OUTPUT ACCEPT # 2. 载入模组 /sbin/modprobe ip_tables 2 /dev/null /sbin/modprobe ip_nat_ftp 2 /dev/null /sbin/modprobe ip_nat_irc 2 /dev/null /sbin/modprobe ip_conntrack 2 /dev/null /sbin/modprobe ip_conntrack_ftp 2 /dev/null /sbin/modprobe ip_conntrack_irc 2 /dev/null # 3. 启动ip伪装 /sbin/iptables -t nat -A POSTROUTING -o $EXIF -s $EXNET -j MASQUERADE 2) 增加可执行权限 [~]# chmod +x /usr/local/nat/nat.sh4. 大功告成 1) Linux主机配置完成, 现在只需重新启动一下刚才的配置: [~]# servie network restart [~]# /usr/local/nat/nat.sh2) 为了使得开机即可运行, 可在 /etc/rc.d/rc.local 文件加入相应的命令: [~]# echo "/usr/local/nat/nat.sh" /etc/rc.d/rc.local5. 配置客户机(可以是windows或linux等其它系统)1. network 设定需要为: 192.168.50.02. broadcast 设定需要为: 192.168.50.2553. netmask 设定需要为 255.255.255.04. IP 设定需要为 192.168.50.1 ~ 192.168.50.254 之一, 且『不能重复』5. Gateway 或者要设定为你的 Linux 的对内 IP , 以我的例子来说, 就是192.168.50.16. DNS 的设定: 这个最容易出错了, DNS 设定需要是 ISP 给你的 DNSIP, 如果不知道的话, 可以填入 168.95.1.1 或者是139.175.10.20 这一个 SeedNet 的 DNS 即可!千万不要设定为 192.168.1.2
最近在Linux下有两个WiFi模组(一个为2.4GHz,另一个为2.4GHz+5GHz双频),刚好路由器为2.4GHz的,而其他接收设备在2.4GHz下数据处理不稳定,想切换为5GHz尝试,故而将两个WiFi模组同时连接到PC上(通过USB接口),当驱动都加载成功时会映射出wlan0和wlan1,关于AP和STA的配置部分在此不说明,下面主要说明下如何让wlan0(2.4G,连接外网,作STA)和wlan1(双频,连接内网,作AP)进行IP转发操作,其实也很简单,只需要执行如下命令即可:
echo 1 /proc/sys/net/ipv4/ip_forward
/system/bin/iptables -A FORWARD -i wlan1 -o wlan0 -m state --state ESTABLISHED,RELATED -j ACCEPT
/system/bin/iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
/system/bin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
其中第一条命令很重要,作用是打开IP转发功能,然后接下来三条命令是添加路由规则(后两条就够了)。
参照文章,上面的语句应改为:
echo 1 /proc/sys/net/ipv4/ip_forward
/system/bin/iptables -A FORWARD -i wlan0 -o wlan1 -m state --state ESTABLISHED,RELATED -j ACCEPT
/system/bin/iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
/system/bin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
1. 配置IP地址
1.1 正确配置学校分配的IP使能正常上网
1) 按学校分配的IP地址配置好Linux主机
[~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
| DEVICE=eth0 |
| BOOTPROTO=none |
| HWADDR=00:1E:90:13:E0:25 |
| IPADDR=10.3.10.19 |
| NETMASK=255.255.255.0 |
| GATEWAY=10.3.10.254 |
| ONBOOT=yes |
| TYPE=Ethernet |
| DNS1=211.64.120.2 |
| DEFROUTE=yes |
| DOMAIN=168.96.1.1 |
2) 重起网卡
[~]# servie network restart
note: 经过以上的配置, Linux主机应该能够正常上网了!
1.2 新增eth0别名设备eth0:0
[~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
| # eth0:0 必须要用''括起来: 'eth0:0' |
| DEVICE='eth0:0' |
| ONBOOT=yes |
| BOOTPROTO=static |
| IPADDR=192.168.50.1 |
| NETMASK=255.255.255.0 |
| USERCTL=no |
1.3 配置后 查看一下是否配置成功:
[~]# ifconfig
| eth0 Link encap:Ethernet HWaddr 00:1E:90:13:E0:25 |
| inet addr:10.3.10.19 Bcast:10.3.10.255 Mask:255.255.255.0 |
| inet6 addr: fe80::21e:90ff:fe13:e025/64 Scope:Link |
| UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 |
| RX packets:187685 errors:0 dropped:0 overruns:0 frame:0 |
| TX packets:137327 errors:0 dropped:0 overruns:0 carrier:0 |
| collisions:0 txqueuelen:1000 |
| RX bytes:134816893 (128.5 MiB) TX bytes:56066393 (53.4 MiB) |
| Interrupt:27 Base address:0xa000 |
| eth0:0 Link encap:Ethernet HWaddr 00:1E:90:13:E0:25 |
| inet addr:192.168.50.1 Bcast:192.168.50.255 Mask:255.255.255.0 |
| UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 |
| Interrupt:27 Base address:0xa000 |
2. 配置路由
由于在配置网卡接口时, 已自动配置一定的路由, 所以我们只需查看一下其信息, 验证其
是否已经被正确配置:
[root ~]$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.50.0 * 255.255.255.0 U 0 0 0 eth0
10.3.10.0 * 255.255.255.0 U 1 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 10.3.10.254 0.0.0.0 UG 0 0 0 eth0
3. 配置NAT
1) 新建nat.sh脚本文件并保存在 /usr/local/nat/ 目录下:
[~]# cat /usr/local/nat/nat.sh
| #!/bin/bash |
| # 0. 设定你的参数值 |
| EXIF='eth0' # 这个是对外的网卡接口, 可能是'ppp0'等 |
| EXNET='192.168.50.0/24' # 这个是对内的网段 |
| # 底下如无需要, 请不要改动了! |
| # 1. 启动routing等 |
| echo 1 /proc/sys/net/ipv4/ip_forward |
| /sbin/iptables -F |
| /sbin/iptables -X |
| /sbin/iptables -Z |
| /sbin/iptables -F -t nat |
| /sbin/iptables -X -t nat |
| /sbin/iptables -Z -t nat |
| /sbin/iptables -P INPUT ACCEPT |
| /sbin/iptables -P OUTPUT ACCEPT |
| /sbin/iptables -P FORWARD ACCEPT |
| /sbin/iptables -t nat -P PREROUTING ACCEPT |
| /sbin/iptables -t nat -P POSTROUTING ACCEPT |
| /sbin/iptables -t nat -P OUTPUT ACCEPT |
| # 2. 载入模组 |
| /sbin/modprobe ip_tables 2 /dev/null |
| /sbin/modprobe ip_nat_ftp 2 /dev/null |
| /sbin/modprobe ip_nat_irc 2 /dev/null |
| /sbin/modprobe ip_conntrack 2 /dev/null |
| /sbin/modprobe ip_conntrack_ftp 2 /dev/null |
| /sbin/modprobe ip_conntrack_irc 2 /dev/null |
| # 3. 启动ip伪装 |
| /sbin/iptables -t nat -A POSTROUTING -o $EXIF -s $EXNET -j MASQUERADE |
2) 增加可执行权限
[~]# chmod +x /usr/local/nat/nat.sh
4. 大功告成
1) Linux主机配置完成, 现在只需重新启动一下刚才的配置:
[~]# servie network restart
[~]# /usr/local/nat/nat.sh
2) 为了使得开机即可运行, 可在 /etc/rc.d/rc.local 文件加入相应的命令:
[~]# echo "/usr/local/nat/nat.sh" /etc/rc.d/rc.local
5. 配置客户机(可以是windows或linux等其它系统)
1. network 设定需要为: 192.168.50.0
2. broadcast 设定需要为: 192.168.50.255
3. netmask 设定需要为 255.255.255.0
4. IP 设定需要为 192.168.50.1 ~ 192.168.50.254 之一, 且『不能重复』
5. Gateway 或者要设定为你的 Linux 的对内 IP , 以我的例子来说, 就是
192.168.50.1
6. DNS 的设定: 这个最容易出错了, DNS 设定需要是 ISP 给你的 DNS
IP, 如果不知道的话, 可以填入 168.95.1.1 或者是
139.175.10.20 这一个 SeedNet 的 DNS 即可!千万不要设定为 192.168.1.2
看你用什么样的发行版了。
一般通用方式是修改iptables的规则,增加端口重定向的规则。
比如:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport21521 -j DNAT --to-destination192.168.0.211:1521
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132
如果是radhat/centos,可以配置firewall,做端口映射。比如:
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流