首先谢谢,楼上的回复。
其次说明下,我遇到的问题:
首先是因为少打了一个s,导致拖延了一个月,都没找出问题。
其次需要说明的是,ufw防火墙无法直接通过iptables命令调用-NAT规则,且规则描述和书写存存在差异性。 从而导致网上的iptables命令无法实现。
再其次是因为某位博主,写帖子时,规则的逻辑写错了,导致我的进度下降,大量时间花在研究两种语法的规则上。
另外还涉及到,iptables的重启清空机制,又花了我不少时间研究Ubuntu的工作机制。
花了2个多月,终于搞定。以下是我对,iptables和ufw两防火墙配置软路由的流程说明。
Ubuntu 服务器实现软路由
PC1:Ubuntun server。网卡:ens33-外网 ens34-内网
PC2:window7。网卡:ens35
ens33与外网相连。
ens34与ens35为同一个网段。
地址分配
ens33 由上级,外网分配,或手动指定
IP地址:192.168.0.10
子网掩码:255.255.255.0
网关:192.168.0.1
DNS:135.152.112.22
ens34 手动指定或由DHCP分配
IP地址:192.168.18.1
子网掩码:255.255.255.254(最好不要使用与ens33完全相同的,掩码,因为那样很可能造成数据包传输串扰——主要是在主服务器对外传输时)
网关:192.168.18.1
ens35 手动指定或由DHCP分配
IP地址:192.168.18.6
子网掩码:255.255.255.254
网关:192.168.18.1
开始软路由配置:
UFW方式配置:优点是,一旦配置完成,长期有效。
iptables方式配置:方法较复杂,但是通用性强,对大多是liunx系统都有效。
UFW配置流程:
1:/etc/sysctl.conf文件,将net.ipv4.ip_forward=1前面的注释去掉。
2:/etc/default/ufw文件,将DEFAULT_FORWARD_POLICY="ACCEPT" ←将 DROP 改为 ACCEPT
3:规则配置:
/etc/ufw/before.rules文件,在文件最底部配置-nat规则
# NAT 下面开始是-NAT规则的详细内容
*nat

REROUTING - [0:0]

OSTROUTING - [0:0]
#允许,外网网卡对内实现,端口转发——内网可以与外网通讯,外网ping不通内网
#sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
#端口转换追加规则路由后从ens33出去的数据以临时地址(伪装地址/ppoe)
-A POSTROUTING -o ens33 -j MASQUERADE
COMMIT
#-NAT 规则到此结束
#允许内网网卡和外网网卡,相互通讯——外网主机可以ping通内网
sudo ufw route allow in on ens34 out on ens33
配置路由允许从ens34网卡进入从ens33网卡出去的数据
#允许数据,从内网网卡,经过外网网卡出去——内网可以调用外网的DNS数据
sudo ufw route allow in on ens33 out on ens34
配置路由允许从ens33网卡进入从ens34网卡出去的数据
配置结束。PC2可以正常上网。
iptables配置流程:
1:/etc/sysctl.conf文件,将net.ipv4.ip_forward=1前面的注释去掉。
2:配置路由和转发规则
#允许,外网网卡对内实现,端口转发——内网可以与外网通讯,外网ping不通内网
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
端口转换追加规则路由后从ens33出去的数据以临时地址(伪装地址/ppoe)
#允许内网网卡和外网网卡,相互通讯——外网主机可以ping通内网
sudo iptables -A FORWARD -i ens34 -o ens33 -m state --state RELATED,ESTABLISHED -j ACCEPT
追加转发 从ens34进入的数据 从ens34出去的数据 建立连接双向发送
#允许数据,从内网网卡,经过外网网卡出去——内网可以调用外网的DNS数据
sudo iptables -A FORWARD -i ens33 -o ens34 -j ACCEPT
追加转发 从ens33进入的数据 从ens34出去的数据 允许
3:保存配置
因为ubuntun不支持,原有的iptables的自启动配置规则的命令,所以所有保存和自启动必须是手动和手动指定启动。
iptables-save > 文件名1
将iptables防火墙的配置规则保存到指定文件名1的文件中
iptables-restore < 文件名1
将保存在指定文件名1文件中的iptables规则,导入iptables防火墙中。
4:配置开机自启动“iptables-restore < 文件名1”。(这里我不详细描述,具体个人推荐“systemctl”)。