我们有一个简单的路由器,它具有对称类型的 NAT,但是由于该路由器没有为我们提供任何调试接口,因此我们无法确定特定的数据包是否到达 NAT。
因此,我们需要设置一台 LINUX 计算机,使其成为具有对称 NAT 的路由器,这样我们就可以捕获到此“NAT”的所有数据包并获取我们想要的信息。我们如何在 linux(Fedora 系统,内核 2.6.xx)上执行此操作?
答案1
要将 Linux 机器设置为路由器,您需要以下内容
1- 使用以下方式启用转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
假设你的公共接口是eth1,本地接口是eth0
2- 使用以下命令设置 natting 规则:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
3-接受来自 eth0 的流量:
iptables -A INPUT -i eth0 -j ACCEPT
4-允许从公共接口建立连接。
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
5-允许传出连接:
iptables -A OUTPUT -j ACCEPT
答案2
我认为其他答案遗漏了一些要点。这是另一种方法,假设 iptables 处于新状态,再次使用 eth0 作为内部接口,使用 eth1 作为外部接口:
在内核中启用IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward # or sysctl -w net.ipv4.ip_forward=1
要在重启后保留此更改,请
net.ipv4.ip_forward=1
在 中添加或取消注释/etc/sysctl.conf
或 中的文件/etc/sysctl.d
。在 eth1 上启用伪装以重写传出数据包的源地址。如果您确实需要对称 NAT,则需要
--random
最后的以下内容:iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
配置转发规则。默认情况下,iptables 将无条件转发所有流量。您可能希望限制来自互联网的入站流量,但允许所有出站流量:
# Allow traffic from internal to external iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT # Allow returning traffic from external to internal iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT # Drop all other traffic that shouldn't be forwarded iptables -A FORWARD -j DROP
请注意,我们没有触及过滤表中的 INPUT 或 OUTPUT 链;这些与路由器无关。
要在重启后保留这些防火墙更改:
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables
此步骤将根据 Linux 发行版而有所不同。
答案3
这是一个简单的脚本,可以完成这个任务,它包含了路由器所需的所有精华,并在 UBUNTU 16.04 上进行了充分测试
#!/bin/bash
# This script is written to make your Linux machine Router
# With this you can setup your linux machine as gateway.
# Author @ Mansur Ul Hasan
# Email @ [email protected]
# Defining interfaces for gateway.
INTERNET=eth1
LOCAL=eth0
# IMPORTANT: Activate IP-forwarding in the kernel!
# Disabled by default!
echo "1" > /proc/sys/net/ipv4/ip_forward
# Load various modules. Usually they are already loaded
# (especially for newer kernels), in that case
# the following commands are not needed.
# Load iptables module:
modprobe ip_tables
# activate connection tracking
# (connection's status are taken into account)
modprobe ip_conntrack
# Special features for IRC:
modprobe ip_conntrack_irc
# Special features for FTP:
modprobe ip_conntrack_ftp
# Deleting all the rules in INPUT, OUTPUT and FILTER
iptables --flush
# Flush all the rules in nat table
iptables --table nat --flush
# Delete all existing chains
iptables --delete-chain
# Delete all chains that are not in default filter and nat table
iptables --table nat --delete-chain
# Allow established connections from the public interface.
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# Set up IP FORWARDing and Masquerading
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LOCAL -j ACCEPT
# Allow outgoing connections
iptables -A OUTPUT -j ACCEPT