家里面的网不是很好,一直想搞个软路由,硬件成本要1000+,无奈疫情又降薪不敢入,手里只有一个群晖DS920+的NAS。
于是用VMM安装了软路由(koolshare),但是在拨号一直拨号不成功,不知道是不是因为我的宽带是移动的原因,
换了爱快的软路由也是一样的拨号不成功,网上各种找资源之后将NAS作为路由器,两个网口,一个连接外网拨号上网(WAN),
一个连接内网(LAN),连接交换机后互联内网各种设备。搞完不知道是不是心里作用,感觉网络好像快了一些,之前看视频要等一两秒,现在几乎是秒开。
1.准备条件
- 双网口的NAS,我的是群辉920+
- 宽带账号和密码,拨号上网用
2.设置网卡IP
在DSM控制面板:网络->网络界面中看到有两个局域网
局域网1对应的网络接口是eth0
,局域网2对应的网络接口是eth1
2.1 固定内网IP
我们将局域网1作为LAN,接入路由器的LAN端口,在这里将他的IP固定:
因为要将该网口作为网关,所以直接将网关地址设置为本机地址。
2.2 设置拨号网卡IP
因为我的局域网2是连接到光猫的,直接获取的IP地址,这里按需设置,如果是设置为固定IP,不能和上面设置的IP(LAN)在一个网段。
3. 设置内网DHCP服务
进入DSM控制面板,找到DHCP Server,选中右边的局域网1,点击上面的编辑:
勾选启用DHCP服务器,然后将主DNS设置为刚才设置的IP地址,从DNS可以随便填一个知名的,以防万一。
点击下方的新增,配置一个子网,地址租用时间的地方填入数字,单位是秒,86400就是一天:
添加完成后确定,然后在新加的子网的最右边勾上已启动,然后确定就设置完成,如果没有启动就手动启动一下。
4.设置外网拨号
回到控制面板的网络界面中,新增pppoe拨号:
局域网选择局域网2,填入宽带用户名和密码然后确定。之后选中PPPoE,右键菜单连接,连接成功如下:
至此拨号成功。
5.设置iptables端口转发
在NAS上新建一个文件nat.sh
,保存位置随意,这里保存在/volume1/app/nat.sh
,添加以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| # Script to enable port forwarding and IP Masquerading, to share # the primary internet connection to the second port of DS718+
action=$1 shift;
INT_IFACE="eth0" IFCFG_FILE="/etc/sysconfig/network-scripts/ifcfg-${INT_IFACE}" DHCPD_CONF="/etc/dhcpd/dhcpd.conf" RULES_NAT="/etc/firewall_rules_nat.dump"
logerr() { # [logger args] [msgs...] TAG="nat_router" [ ! -z "$action" ] && TAG="${TAG} (${action})" logger -p user.err -t "${TAG}" "$@" }
# Guard to prevent execution if NAT is not supposed to be enabled [ -e $IFCFG_FILE -a -e ${DHCPD_CONF} ] || { logerr "Missing config files"; exit 1; }
IPADDR=`get_key_value ${IFCFG_FILE} IPADDR` NETMASK=`get_key_value ${IFCFG_FILE} NETMASK` IS_ROUTER=`grep option:router ${DHCPD_CONF} | grep -c ${IPADDR}`
[ ${IS_ROUTER} -eq 0 ] && { logerr "Routing mode not enabled on ${INT_IFACE}"; exit 1; }
# Calculate local network CIDR CIDR_PREFIX=`ipcalc -p ${IPADDR} ${NETMASK} | cut -d'=' -f2` CIDR_IP=`ipcalc -n ${IPADDR} ${NETMASK} | cut -d'=' -f2` CIDR="${CIDR_IP}/${CIDR_PREFIX}"
setup_nat() { # Enable port forwarding, in case not enabled by default echo 1 > /proc/sys/net/ipv4/ip_forward
# Load the required modules #/usr/syno/etc.defaults/rc.d/S01iptables.sh load_nat_mod forwarding_test }
load_nat_rules() { if [ -e ${RULES_NAT} ]; then /sbin/iptables-restore -n < ${RULES_NAT} &> /dev/null if [ $? -eq 0 ]; then logerr "NAT rules loaded successfully" else logerr "Error loading NAT rules from: ${RULES_NAT}" exit 1; fi else logerr "No NAT rules found" fi
# Define the masquerading rule /sbin/iptables -t nat -D POSTROUTING -s ${CIDR} -j MASQUERADE &> /dev/null # don't add twice /sbin/iptables -t nat -A POSTROUTING -s ${CIDR} -j MASQUERADE }
save_nat_rules() { TMP_RULES="/tmp/firewall_rules_nat.tmp"
echo "# $(date)" > ${TMP_RULES} echo "*nat" >> ${TMP_RULES}
/sbin/iptables-save -t nat | grep "\-j DNAT" | uniq >> ${TMP_RULES}
echo "COMMIT" >> ${TMP_RULES} mv -f ${TMP_RULES} ${RULES_NAT}
logerr "NAT rules saved to ${RULES_NAT}" }
clear_nat_rules() { /sbin/iptables-save -t nat |grep "\-j DNAT" | sed 's/^-A /-D /g' | while read line; do if [ ! -z "$line" ]; then /sbin/iptables -t nat $line &> /dev/null fi done
/sbin/iptables -t nat -D POSTROUTING -s ${CIDR} -j MASQUERADE &> /dev/null }
case "$action" in start) setup_nat load_nat_rules ;; stop) save_nat_rules clear_nat_rules ;; restart) save_nat_rules clear_nat_rules load_nat_rules ;; *) echo "Usage: $0 [start|stop|restart]" ;; esac
exit 0
|
注意:脚本第7行:INT_IFACE="eth0"
的eth0对应的就是局域网1,如果是将局域网2作为LAN,则需要将eth0改为eth1。
运行脚本:
手机连上路由器(路由器的WAN端口不需要插网线)然后尝试访问外部网络,能否访问成功,能访问成功就设置完成。
6.设置脚本开机启动
在DSM控制面板中找到任务计划,新增->触发的计划->用户定义的脚本:
在常规中设置用户账户为root,事件设置为开机,勾选已启动,因为刚才已经运行一次了。任务设置中设置脚本:
| sh /volume1/app/nat.sh start
|
这里的路径就是之前创建的路径。
7.停止作为路由器使用
先停掉服务(重启NAS也可以):
| sh /volume1/app/nat.sh start
|
然后将创建的开机启动任务禁用或者删除。
8.待验证事项
- 断线之后(比如拔掉网线)后PPPoE会自动重拨。
- 断网断电后是否会自动拨号重连?