求助,Ubuntu-server-16.04.1-amd_64 如何实现软路由

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
回复
shuiyueshan
帖子: 6
注册时间: 2011-08-12 15:21

求助,Ubuntu-server-16.04.1-amd_64 如何实现软路由

#1

帖子 shuiyueshan » 2017-02-10 14:07

如题,安装Ubuntu-server-16.04.1-amd_64 字符界面。
网卡1:对外网NET模式,可以上网
ens33
地址:192.168.41.1
子网掩码:255.255.255.0
网关:192.168.42.2

网卡2:对内网私有网络。
ens34
地址:192.168.18.1
子网掩码:255.255.255.248

如果实现,软路由。
外网《-》ens33《-》ens34-》私有网络,主机1,主机2。
主机1和主机2通过,路由上外网。

网上很多教程都是,来实现。路由转发。
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
但是Ubuntu-server-16.04.1-amd_64是 UFW,请问如何实现。
我知道可以实现,但是,我是新手,我不会,求学习,自己研究2个多星期,还是找不到问题,所在,使用虚拟机,构建虚拟网络。tracert(路由跟踪)命令,失效,都无法找出问题所在。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 求助,Ubuntu-server-16.04.1-amd_64 如何实现软路由

#2

帖子 astolia » 2017-02-14 16:06

ufw和iptables都是在操作内核中的ipfilter框架。
直接使用iptables命令并不会有问题,只需要注意一下执行顺序,确保你自己添加的规则不会和ufw的规则冲突。简单来说就是-A和-I参数的区别
如果要使用ufw来添加规则,你可以查看ufw的手册,用man ufw。
你也可以用sudo ufw disable来彻底关闭ufw。

另外,我不觉得你失败是因为规则的问题。因为ufw默认的规则并不会和你的命令冲突
最大的可能性还是ubuntu系统默认关闭了转发功能,你没有去打开。

代码: 全选

sysctl net.ipv4.ip_forward
如果上面的输出是0,就表示转发功能是关闭的,用

代码: 全选

sudo sysctl net.ipv4.ip_forward=1
打开
shuiyueshan
帖子: 6
注册时间: 2011-08-12 15:21

Re: 求助,Ubuntu-server-16.04.1-amd_64 如何实现软路由

#3

帖子 shuiyueshan » 2017-03-02 11:07

首先谢谢,楼上的回复。
其次说明下,我遇到的问题:
首先是因为少打了一个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

:PREROUTING - [0:0]
:POSTROUTING - [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”)。
回复