| 
 | 
 
自己做软路由的原因: 
 
原本我使用一台旧PC机+爱快来做软路由,首先要强调爱快基本是完美的可以满足需求并且是完全免费的,除了一个问题VPN拨号,无论是PPTP还是L2TP都存在很明显的BUG,但是爱快并没有认真修复,反而在每次升级时都会出现更加大的问题。 
PPTP在升级到2.6.12之后,会出现一大堆协议错误,2.7.0也是一样。L2TP升级了这么多次,依然不支持共享密钥,而且不会自动拨号的情况出现几率是99%。爱快也没有给这两种VPN设置手动重新拨号的按键,所以你就智能傻等了,唯一解决方案就是重启路由器。。。。 
好不容易找到的2.6.11版本勉强可用,PPTP也会经常出现一大堆协议错误,但是好歹比2.6.12全是协议错误要好点。 
另外,爱快中的很多功能都是针对网吧设计的,比如web认证和计费,防火墙的那一堆设置等,作为一个伪处女座我有洁癖接受不了这么多不用的功能。 
也有一些我想自己添加和扩展的功能,使用一个开放的系统会更灵活一些。 
 
--------------------------------------------------------------------------------------- 
我期望中的软路由的特性: 
 
系统:ubuntu server lts (目前的LTS是16.04) 
1:能支持主流的硬件驱动,适用的硬件范围广泛,老旧机器和各种淘宝买到的多口网卡都可以顺利安装 
2:有主流的软件安装包支持(比如pppoe,各种vpn客户端等)和大量的中文网络技术资料支持 
3:能使用shell,crontab,python等进行简单开发和功能扩展 
 
-----------必要功能---------- 
PPPOE: 
1:能稳定的拨号,24小时运行不掉链子 
2:断线重连,开机自动启动 
3:多拨和多线负载均衡暂时不考虑,这个家用的可能性比较少,某些城市能同一运营商多拨并且带宽叠加的估计也会慢慢被限制,此功能网吧和公司用的比较多。 
 
路由: 
1:所有的LAN口可以自动NAT转换,通过WAN口上网 
 
DHCP: 
1:能DHCP分配IP 
2:能对指定的MAC地址分配固定IP,比如家里的NAS和打印机 
 
UPNP,端口映射,VPN穿透: 
1:支持UPNP,以便于迅雷等P2P软件实现外网连接和高速下载2:如果支持端口映射也可以,毕竟需要转发的端口都可以固定下来。比如3389远程桌面等连接到内网的电脑上。 
3:要能支持公司办公类VPN穿透路由。 
 
智能分流: 
1:支持PPTP,L2TP, shadowsocks等主流VPN客户端 
2:支持根据泛域名进行VPN分流 
3:支持VPN的流量使用单独的DNS服务器,避免DNS污染 
4:断线自动重连,开机自动启动 
 
远程管理: 
1:支持SSH远程登录管理 
 
----------可选功能--------- 
 
交换: 
1:所有的LAN口可以实现千兆交换。如果买了2个口以上的网卡,剩下的口可以用来连接电脑或者更多交换机使用。这个应该是靠安装open vswitch软件来实现。 
2:VLAN划分,这个暂时不考虑,家用网络没那多需求,风暴的可能性比较小,VLAN的意义暂时没有那么大。 
 
安全管理: 
1:支持封禁MAC地址,防止蹭网和破解攻击 
2:封禁某些端口。iptables应该可以实现。 
 
动态域名: 
1:支持定期把自己的IP上传到远端服务器上去 
2:支持DNSPOD的顶级动态域名API自动更新 
 
家长管理: 
1:对单个MAC进行限速 
2:对单个MAC的访问域名限制在白名单范围内 
 
其他: 
1:似乎PSN的网络有一些特殊需求,还没入PS4没研究过 
2:图片视频等文件缓存服务器,降低外网请求量,加快网络速度 
3:DNS缓存服务器,加速DNS解析 
 
 
----------------------------------------------------------------------------------- 
以下是具体实现过程: 
我以安装和配置记录的形式一步一步的写出来,这样你可以有选择性的自己来定制。当然,对动手能力也有一定要求。 
 
 
第一步:准备硬件 
硬件要求很低,能装的上ubuntu即可;并且有两个以上的网口(内置网卡、外置网卡、内外网卡混合使用都可以)一个作为wan口连接你的运营商,一个作为lan口连接交换机。 
我目前的配置是 AMD黑盒5000+(CNQ动态降频),华擎785G主板,淘宝买的垃圾AMD专用4G DDR2内存,旧SATA硬盘,旧铜牌转换效率电源,一个集成单口千兆网卡,一个淘宝买的4口千兆PCI网卡,待机功耗估计几十W左右。 
 
第二步:安装ubuntu server 16.04 lts 
下载链接:ubuntu官网 
安装教程: 
下载完ISO后,下载这个工具Universal USB Installer,准备一个U盘,把iso用这个工具写入到U盘,选项选(ubuntu server installer才能看到你下载的ISO) 
然后把U盘插入电脑,开机进bios选择U盘启动。 
启动后可能会出现这个问题:missing parameter in configuration file,输入help,然后回车就可以开始安装界面了。 
安装选项:(供参考,不一定非要一致) 
1:磁盘使用我选的整个硬盘 
2:除了ubuntu核心文件没有选择其他任何软件(包括SSH等都是根据需求安装) 
3:安装的英文版 
安装完成后拔掉U盘,启动电脑,根据你的显卡,你会只看到显示两行字类似这样的(或者完全没有任何显示): 
/dev/sda1:recovering journal 
/dev/sda1:clean, 74472/7299072 files, 881725/29182208 blocks 
这时候按 Ctrl+Alt+F1就可以切换到终端了,可以使用安装过程中设置的用户名和密码登陆进去。 
 
第三步:设置root密码,使用root登录 
这样方便一些,后续所有命令省去sudo,也比较危险 
sudo passwd root 
即可给root设置密码,然后exit,使用root登录。 
下面的说明都是按照root帐号的 
 
顺便开启SSH登陆,方便后续管理 
apt-get install openssh-server openssh-client 
vi /etc/ssh/sshd_config 
把PermitRootLogin这一行改为PermitRootLogin yes 
service ssh restart 
 
第四步:安装和设置 DHCP 
我这里的网络拓扑结构如下:(下面便于理解把interface叫做网卡) 
假设你有2块网卡分别叫eth0,eth1(多于2个网卡的交换机功能作为可选功能后续实现,先暂时只使用其中两个网卡)。 
网卡的名字可能不叫这个,可以通过ifconfig -a来查看。如果不叫这些名字,那么下面的命里里要换成你实际的网卡名称。比如我的是enp4s0f0对应eth0,enp5s0f0对应eth1 
 
eth0作为WAN口,接运营商的网线(比如来自光猫),用来pppoe拨号,这个网卡不设置默认IP,在拨号成功后也不会获得一个IP。 
在拨号成功后,系统里实际上会再添加一个虚拟网卡叫做ppp0,是真正用来上网的网卡,会有一个外网IP。 
 
eth1作为LAN口,配置为内网IP 192.168.1.1,作为默认的内网网关,实现内网外网之间的转换。 
这个网口接家里的连接交换机,交换机上连接其他各种上网设备。同时DHCP服务也绑定在这个网卡上。 
 
把eth1的IP改为192.168.1.1 
vi /etc/network/interfaces 
把原来的iface eth1 inet auto改为 
iface eth1 inet static 
address 192.168.1.1 
netmask 255.255.255.0  注意不要设置gateway 
然后重启network。 
service networking restart 
 
DHCP服务的步骤:(使用dnsmasq作为DHCP服务器, 他同时也是DNS代理服务器,为后续的智能分流做准备) 
apt install dnsmasq 
vi /etc/dnsmasq.conf 
 
strict-order 
listen-address=192.168.1.1,127.0.0.1 
dhcp-range=192.168.1.110,192.168.1.199,12h 
可以限定mac的ip分配 
dhcp-host=00:e0:4c:2c:f0:83,192.168.1.100 
dhcp-host=44:d2:44:46:2b:8f,192.168.1.102 
 
service dnsmasq restart 
 
 
第五步:安装和设置 ppoe拨号 
使用pppoeconf来配置拨号,注意运行这个程序时,eth0网口必须连上猫。基本上输入上网的用户名密码一路next就OK,他会帮你做成开机启动,并帮你把MTU值改成小于1500的。 
apt-get install pppoeconf 
pppoeconf 
 
 
后续可以手工使用的几个命令: 
拨号:pon dsl-provider 
断线:poff 
查看日志:plog 
 
 
这个pppoeconf是通过修改/etc/network/interface来实现开机自动拨号的 
拨号成功之后,会出现一个新的网卡ppp0 
 
 
 
 
第六步:安装和设置 路由和网关功能 
 
 
 
网关的功能是通过iptables来实现的。 
原理如下: 
iptales只读取数据包头,不会给信息流 增加负担,也无需进行验证。  
典型的防火墙设置有两个网卡:一个流入,一个流出。 
iptables读取流入和流出数据包的报头,将它们与规则集(Ruleset)相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。 
在传统的标准的TCP/IP通信过程中,所有的路由器仅仅是充当一个中间人的角 色,也就是通常所说的存储转发,路由器并不会对转发的数据包进行修改,更为确切的说,除了将源MAC地址换成自己的MAC地址以外,路由器不会对转发的数 据包做任何修改。NAT(Network Address Translation网络地址翻译)恰恰是出于某种特殊需要而对数据包的源ip地址、目的ip地址、源端口、目的端口进行改写的操作。 在linux2.4的NAT-HOWTO中,作者从原理的角度将NAT分成了两种类型,即源NAT(SNAT)和目的NAT(DNAT),顾名思义,所谓SNAT就是改变转发数据包的源地址,所谓DNAT就是改变转发数据包的目的地址。 
 
 
 
设置过程: 
1:修改路由表 
让所有发往内网192.168.1.X的包都走eth1,用于局域网内部通信比如访问NAS 
让发往其他网段的包都走ppp0 
ubuntu的pppoe之后,会自动修改成这样,所以不需要手动改。 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0 
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1 
 
2:通过iptables设置NAT 
 
把这个配置文件的值改成1 
echo 1 > /proc/sys/net/ipv4/ip_forward 
 
vi /etc/sysctl.conf 
  取消 # net.ipv4.ip_forward = 1 的注释,保存退出 
让sysyctl生效 
sysctl -p 
 
删除之前iptables规则 
iptables -F 
iptables -P INPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
其中MASQUERADE是用来动态获取ppp0的当前IP的,这个命令就是把所有的目标是ppp0(由route路由表决定包走向)的包的源地址,替换为ppp0的外网地址。 
 
因为POSTROUTING是一个链,所以后续收到外网服务器回应的包的DNAT操作就是自动的了,不需要再设置一条外网到内网的转化规则。 
Mangle表的5条链:  
(1)PREROUTING 链:数据包进入防火墙后,路由判断之前改变数据包。  
(2)POSTROUTING链:数据包确定了目标地址后,即路由判断前改变数据包。  
(3)OUTPUT链:在数据包被确定目的地址前改变数据包  
(4)INPUT链:在数据包进入本机后,应用程序接受之前改变数据包。  
(5)FORWARD链:第一次路由判断之后,最后一次路由判断前改变数据包。 
 IPTABLES中数据包和4种被跟踪连接的4种不同状态。  
(1)NEW : 该包想要开始一个连接(重新连接或将连接重定向)  
(2)RELATED:该包是属于某个已经建立的连接所建立的新连接。例如:FTP的数据传输连接就是控制连接所 RELATED出来的连接。 --icmp-type 0 ( ping 应答) 就是--icmp-type 8 (ping 请求)所RELATED出来的  
(3)ESTABLISHED :只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包。 
(4)INVALID:数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。 
 
 
到这里,一个标准的路由器就设置完成了,可以上网了。 
其中第六步的命令,需要写到/etc/rc.local文件里,以便开机执行。(iptables规则重启后就没了) 
echo 1 > /proc/sys/net/ipv4/ip_forward 
iptables -F 
iptables -P INPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
 
由eth0拨号,生成ppp0连接外网,会修改你系统路由表让默认流量走ppp0,并会自动把DNS服务器地址放到你系统的/etc/resolve.conf里面。这个文件会被dnsmasq读取,并修改这个文件为nameserver 127.0.0.1,把本机的dns服务转移到dnsmasq去。 
 
一台电脑接入这个路由后,由dnsmasq作为DHCP服务分配IP,网关(192.168.1.1),DNS(192.168.1.1)。 
根据路由表设置,这个电脑发包到192.168.1.X的请求都会被route到eth1直接扩散到内网去,其他所有请求都会route到ppp0。 
系统路由表如下: 
root@softrouter:~# route -n 
Kernel IP routing table 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0 
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1 
 
到ppp0的外网请求,都会被iptables的SNAT规则修改包,把源地址的内网IP替换成ppp0的外网IP,来实现这台内网电脑和外网服务器的通信。 
 
ifconfig信息如下: 
root@softrouter:~# ifconfig 
eth0  Link encap:Ethernet  HWaddr 05:1f:29:60:6d:a2   
          inet6 addr: fe80::21f:29ff:fe60:6da1/64 Scope ink 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:248591 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:205203 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000  
          RX bytes:351559413 (351.5 MB)  TX bytes:24780183 (24.7 MB) 
          Interrupt:17 Memory:fe8e0000-fe900000  
 
 
eth1  Link encap:Ethernet  HWaddr 05:1f:29:60:6d:a3   
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0 
          inet6 addr: fe80::21f:29ff:fe60:6da3/64 Scope ink 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:202917 errors:0 dropped:9 overruns:0 frame:0 
          TX packets:247477 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000  
          RX bytes:22854709 (22.8 MB)  TX bytes:349248551 (349.2 MB) 
          Interrupt:19 Memory:feae0000-feb00000  
 
 
lo        Link encap ocal Loopback   
          inet addr:127.0.0.1  Mask:255.0.0.0 
          inet6 addr: ::1/128 Scope:Host 
          UP LOOPBACK RUNNING  MTU:65536  Metric:1 
          RX packets:618 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:618 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1  
          RX bytes:43289 (43.2 KB)  TX bytes:43289 (43.2 KB) 
 
 
ppp0      Link encap oint-to-Point Protocol   
          inet addr:188.253.98.11  P-t-P:100.160.22.1  Mask:255.255.255.255 
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1 
          RX packets:248471 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:205113 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:3  
          RX bytes:345091391 (345.0 MB)  TX bytes:19441020 (19.4 MB) 
 
/etc/network/interfaces文件是这样的 
root@softrouter:~# more /etc/network/interfaces 
# This file describes the network interfaces available on your system 
# and how to activate them. For more information, see interfaces(5). 
 
 
source /etc/network/interfaces.d/* 
 
 
# The loopback network interface 
auto lo 
iface lo inet loopback 
 
 
# The primary network interface 
#auto eth1 
#iface eth1 inet dhcp 
 
 
auto eth1 
iface eth1 inet static 
address 192.168.1.1 
netmask 255.255.255.0 
 
 
auto dsl-provider 
iface dsl-provider inet ppp 
pre-up /bin/ip link set eth0 up # line maintained by pppoeconf 
provider dsl-provider 
 
 
auto eth0 
iface eth0 inet manual 
 
 
 
第七步:VPN智能分流 
 
思路: 
一套完整的服务由以下几个部分组成,目前都是必须的,以后随着pdnsd的发展如果能支持ipset后,可以取消dnsmasq 
(1):shadowsocks 
包括服务器端的ss-server和路由器端的ss-redir,用来实现socks5代理 
(2):dnsmasq 
主要是用来支持把你想要分流的域名解析出来的ip放到一个ipset里面去,比如这个ipset名字叫fenliu。 
(3):iptables 
把所有访问fenliu这个ipset里面IP的包,都转发给ss-redir 
(4):pdnsd 
主要作用是把DNS解析这个udp请求转为tcp请求,并通过ss-redir来走,以避免dns污染。 
如果你用dnsmasq直接连8.8.8.8,部分域名会被污染,比如我这里facebook、t66y会被污染,但是google.com不会。 
 
 
步骤: 
1:server端安装shadowsocks 
我的server也是ubuntu 16.04 lts,安装参考这个shadowsocks – libev 服务端的部署 
 
Ubuntu 16.10及以上版本则可以直接从Ubuntu的官方repo安装 
apt-get update 
 
apt-get install shadowsocks-libev 
 
 
 
然后配置服务端的config, 
vi /etc/shadowsocks-libev/config.json 
{ 
        "server":"0.0.0.0", 
        "server_port":8888, 
        "password":"password", 
        "method":"aes-256-cfb", 
        "timeout":60 
} 
 
因为我不知道默认安装的service启动了哪些服务,所以我把service关掉了,自己手动起服务。 
service shadowsocks-libev stop 
删除/etc/rc5.d 目录下的shadowsocks-libev软链接。 
 
 
手动启动服务,至启动ss-server: 
nohup ss-server -c /etc/shadowsocks-libev/config.json -u -v > /root/ss/log 2>&1 & 
把这条命令写到/etc/rc.local以便开机启动 
 
如果你的服务器开了防火墙比如ufw,可能需要开一下端口号 
ufw allow 8888 
如果服务器是双网卡内外网结构,还要做一个NAT(取决于服务器的网络架构,aws的EC2就不需要) 
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -o eth1 -j MASQUERADE 
 
2:路由器安装shadowsocks 
和1一样,安装完之后配置config 
{ 
    "server":"example.com or X.X.X.X", 
    "server_port":8888, 
    "local_address":"0.0.0.0", 
    "local_port":1080, 
    "password":"password", 
    "timeout":60, 
    "method":"aes-256-cfb" 
} 
 
同样关掉service自己启动服务,只启动ss-redir,ss-redir服务监控在本机所有ip的1080端口 
service shadowsocks-libev stop 
删除/etc/rc5.d 目录下的shadowsocks-libev软链接 
 
nohup ss-redir -c /etc/shadowsocks-libev/config.json -u -v > /root/ss/log 2>&1 & 
 
3:把你想要的域名通过单独的DNS解析,并把解析后的IP放到ipset里面 
ipset create fenliu hash:ip 
vi /etc/dnsmasq.conf 
加入这些 
server=/google.com/192.168.1.1#7777 
server=/t66y.com/192.168.1.1#7777 
server=/facebook.com/192.168.1.1#7777 
ipset=/google.com/fenliu 
ipset=/t66y.com/fenliu 
ipset=/facebook.com/fenliu 
我把这些域名的dns指向了后续下一步pdnsd的服务端口,使用pdnsd来转成tcp请求,通过ss-redir来防止dns污染。 
service dnsmasq restart 
 
 
4:将目的IP是这个ipset里面的ip的包,转发给ss-redir 
iptables -t nat -A PREROUTING -p tcp -m set --match-set fenliu dst -j REDIRECT --to-ports 1080 
iptables -t nat -A OUTPUT -p tcp -m set --match-set fenliu dst -j REDIRECT --to-ports 1080 
iptables -t nat -A PREROUTING -p udp -m set --match-set fenliu dst -j REDIRECT --to-ports 1080 
iptables -t nat -A OUTPUT -p udp -m set --match-set fenliu dst -j REDIRECT --to-ports 1080 
 
 
5:安装pdnsd服务 
 
apt-get install pdnsd 
vi /etc/pdnsd.conf 
改成这样: 
global { 
        perm_cache=2048; 
        cache_dir="/var/cache/pdnsd"; 
        run_as="pdnsd"; 
        server_ip = 0.0.0.0;   
        server_port=7777; 
        status_ctl = on; 
        paranoid=on; 
        query_method=tcp_only;  // 这个特别重要 
        min_ttl=15m;       // Retain cached entries at least 15 minutes. 
        max_ttl=1w;        // One week. 
        timeout=10;        // Global timeout option (10 seconds). 
} 
server { 
        label = "public-dns-servers"; 
        ip = 208.67.222.222, 208.67.220.220; 
        port = 5353; 
        timeout = 4; 
        reject = 243.185.187.39 
//      ,243.185.187.39 
        ; 
        reject_policy = fail; 
} 
 
 
pdnsd把解析服务通过208.67.222.222#5353, 208.67.220.220#5353这个服务来解析,据说8.8.8.8用tcp还是会被拦截,所以就不用google的了 
为了保证正确解析,这两个ip也需要加入ipset通过ss-redir转发 
ipset add fenliu 208.67.222.222 
ipset add fenliu 208.67.220.220 
 
 
现在就大功告成了!:) 
 
 
第八步:把以上规则和服务做成开机启动,以及添加定期监控 
 
 
开机启动,最终我的/etc/rc.local 是这样的 
 
 
 
root@softrouter:~# more /etc/rc.local         
#!/bin/sh -e 
# 
# rc.local 
# 
# This script is executed at the end of each multiuser runlevel. 
# Make sure that the script will "exit 0" on success or any other 
# value on error. 
# 
# In order to enable or disable this script just change the execution 
# bits. 
# 
# By default this script does nothing. 
 
 
#for soft router nat 
echo 1 > /proc/sys/net/ipv4/ip_forward 
iptables -F 
iptables -P INPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
 
 
#for shadowsocks 
ipset create fenliu hash:ip 
iptables -t nat -A PREROUTING -p tcp -m set --match-set fenliu dst -j REDIRECT --to-ports 1080 
iptables -t nat -A OUTPUT -p tcp -m set --match-set fenliu dst -j REDIRECT --to-ports 1080 
iptables -t nat -A PREROUTING -p udp -m set --match-set fenliu dst -j REDIRECT --to-ports 1080 
iptables -t nat -A OUTPUT -p udp -m set --match-set fenliu dst -j REDIRECT --to-ports 1080 
 
 
#for pdnsd 
ipset add fenliu 208.67.222.222 
ipset add fenliu 208.67.220.220 
 
 
nohup ss-redir -c /etc/shadowsocks-libev/config.json -u -v > /root/ss/log 2>&1 & 
 
 
 
 
exit 0 
 
 
 
自动监控,是通过crontab定期运行一个脚本实现的,对于拨号的自动监控脚本如下: 
 
root@softrouter:~/pppoe# more pppoe-m.sh  
#!/bin/sh 
 
 
dns1="baidu.com" 
dns2="qq.com" 
 
 
ping -s 1 -c 1 $dns1 
if [ "$?" != "0" ] 
then 
        ping -s 1 -c 2 $dns2 
        if [ "$?" != "0" ] 
        then    
                echo "re dail" 
                poff 
                pon dsl-provider 
        else 
                echo "suan le" 
        fi    
else 
        echo "zhengchang"             
fi 
 
 
crontab -e 
加一行 
*/1 * * * * /root/pppoe/pppoe-m.sh >> /root/pppoe/pppoe.log 
 
 
 
第九步:端口转发 
端口转发其实挺简单的,对内网的某台机器做DNAT操作即可,因为之前设置为路由器的时候,已经配置了全部ppp0的流量做了SNAT,所以SNAT就不需要再配置了。 
 
比如,要对内网的某台windows机器192.168.1.100做远程桌面的端口转发,这么配置即可: 
iptables -t nat -A PREROUTING ! -d 192.168.1.0/24 -p tcp --dport 3389 -j DNAT --to-destination 192.168.1.100:3389 
这里我没找到DNAT怎么设置自动使用外网的IP地址(SNAT是可以用 -j MASQUERADE的),所以就给配置成了访问非内网网段的IP的3389,都给DNAT到这台机器上。 
 
第十步:动态域名解析 
动态域名我不准备使用花生壳之类的,因为对二级域名实在是记不住。 
 
我用我目前这个yylib的子域名来做。 
(1):把解析服务转到dnspod,这是一个腾讯全资的dns服务商,提供免费DNS服务和监控服务,最关键的是有免费的ddns的API。 
地址 https://www.dnspod.cn/ 
(2):设置一个A的子域名记录,比如i.yylib.com,解析到你当前ppp0的IP上 
(3):在dnspod上 用户中心--安全设置--API Token 里面,生成一个id和token 
(3):在路由器上定期发送自己的IP到dnspod。 
他的官网列出了很多可用的第三方脚本,https://support.dnspod.cn/Support/api 
我用的是这一个 : https://github.com/anrip/ArDNSPod 
 
下载ddnspod.sh,dns.conf.example这两个文件。 
 
修改ddnspod.sh的193行 lastIP=$(arDdnsInfo "$1 $2"),改为lastIP=$(arDdnsInfo "$1" "$2"),这一行的参数传递作者写错了。 
 
 
修改dns.conf.example为dns.conf 
内容如下: 
root@softrouter:~# more dns.conf  
# For security reasons, it is recommended that you use token-based auth instead 
# arMail="test@gmail.com" 
# arPass="123" 
 
 
# Combine your token ID and token together as follows 
arToken="2惺惺惜惺惺,679哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈" 
 
 
# Place each domain you want to check as follows 
# you can have multiple arDdnsCheck blocks 
arDdnsCheck "yylib.com" "i" 
 
 
然后加入crontab即可 
crontab -e 
增加一行 
*/1 * * * * /root/ddnspod.sh >> /root/ddns.log 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |