荣耀之链论坛

?找回密码
?立即注册
搜索
查看: 3836|回复: 13
打印 上一主题 下一主题

centos 当软路由

[复制链接]

550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
跳转到指定楼层
楼主
发表于 2018-5-5 18:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
总结:测试过了,延迟和openwrt差不多,然后好像系统中断比openwrt高一些
感觉折腾这个没什么意义,算了,还是继续用openwrt吧




1.下载mini版的centos版本(个人推荐centos6.10)
2.安装
3.需要实现的功能在2楼
建议给512M内存就行

本人踩过的坑:
centos7以上的版本都有问题,最开始是netmanager服务自动修改dns地址
后来换了1810版本,LAN口我即使设定为了静态IP,但是不知道为什么最开始的IP成为了secondaryIP以后就永远无法消除了,重启依旧有,我服
然后就是PPTP客户端超级卡

最后我用centos6.10安装了软路由,速度飞快,pptp流畅无比

然后说说openwrt,我这几天刚装了openwrt,发现有个莫名其妙的小bug,我转发了2200-22 3890-3389,结果2200的端口转发一切正常,3890的端口转发死活不生效,这种莫名其妙的bug折腾死人

我今天花了6个小时折腾软路由
最后用了十五分钟使用centos6.10然后就一切正常了
哎,看来技术方面的东西不是越新越好啊
刚刚软路由又出现bug,游戏无法登陆,网页什么的一切正常,但是我完的游戏又登陆不上了,用openwrt就是正常的
哎,这到底是什么原因啊
最后我又回到了openwrt
然后取消了PPTP,改用L2TP了,问题好了一些,但是端口转发竟然3389死活不成功
然后我今天把内网的L2TP断开以后发现路由器上的l2tp竟然成功了一个3389的端口,另外一个还是不成功
然后把内网的那个L2TP拨号以后路由器的那个3389又失败了
openwrt的防火墙bug,我改用自己的规则以后端口转发就一切正常了??





550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
沙发
?楼主| 发表于 2018-5-5 18:46 | 只看该作者
1.需要实现的功能有dns自定义解析,例如把www.abc.com解析到1.1.1.1
解决方案:dnsmasq

2.代理服务器

3.端口转发
使用firewall

4.使内部PPTP客户端可以正常使用

5.流量控制
(保存每天的峰值带宽,如果发现峰值带宽和设置的带宽差距太多,则提醒是否是带宽设置错误)
好像是用tc
或者可以用现成的免费的panabit,需要多装一个虚拟机
流控方式
流控数值
带宽占比
刚开始每个人都能达到最大带宽
然后间隔1秒判断带宽是否跑满了(用iptables查看总流量-上一次查看的总流量)
如果跑满了,则判断当前的流控数值是否大于 总带宽/客户端数
如果大于则把流控数值设置为带宽的90%
然后1秒后如果带宽还是满的,则80%
直到流控数值等于总带宽/客户端数
同时判断带宽还剩余多少
如果带宽剩余超过10%,则计数+1,否则计数清零,当计数达到30,则把流控数值的百分比提高10%,同时计数清零
上传和下载分开计算
iptables应该是有限制包数的,建议按照包数限制,而不是按照流量限制
比如检测到1秒内的总包数,然后看看流量是否满了,如果满了,则把包数限制在总包数的90%
如果没满则把包数+10%

6.过滤广告(个人觉得没必要在这里做,浏览器伤的adblock plus就足够了)

550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
板凳
?楼主| 发表于 2018-5-6 01:39 | 只看该作者
vi /etc/sysconfig/selinux
改为disabled

getenforce可以查看当前的状态
setenforce 0或者1??可以临时设置状态

纯当作路由器用这里可以不用改,不影响路由转发
个人觉得如果没有出特殊问题应该是可以不用改的

这里可以先做第十楼的步骤
停止Network Manager服务

这个服务太恶心了,会在后台更改网络设置,直接停用

550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
地板
?楼主| 发表于 2018-5-6 21:59 | 只看该作者
第一步:开启转发
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
就这2句,服务器重启依然有效

然后需要把不同的接口放到不同的zone
#把eth0加入到internal
firewall-cmd --change-interface=eth0 --zone=internal??--permanent
firewall-cmd --change-interface=eth0 --zone=trusted --permanent
#把eth1加入到external
firewall-cmd --change-interface=eth1 --zone=external??--permanent
#设置默认的zone 设置这个的目的是输入firewal-cmd --list-all查看的就是默认的zone
firewall-cmd --set-default-zone=internal






下面是是centos6的iptables的方法

开启ipv4转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE



客户端把网关指向centos的IP地址就能上网了




550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
5#
?楼主| 发表于 2018-5-11 04:23 | 只看该作者
DHCP我建议还是直接在dnsmasq里面做吧,直接集成了DNS和DHCP,而且配置起来非常简单












第二步:开启DHCP
http://www.bubuko.com/infodetail-1771129.html??参数的意思可以看这里

yum -y install dhcp
#cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf2
vi /etc/dhcp/dhcpd.conf

#直接清空整个文件,输入下面的内容
log-facility local7;
#删除所有自带的subnet,新增下面的
subnet 192.168.11.0 netmask 255.255.255.0 {
? ?? ???range 192.168.11.100 192.168.11.200; # 分配地址范围
? ?? ???option routers 192.168.11.21; #默认网关
? ?? ???option domain-name-servers 192.168.11.21; #默认DNS服务器
? ?? ???option domain-name "centos7-1708";
? ?? ???default-lease-time 604800;
? ?? ???max-lease-time 604800;
? ?? ???#给这个主机分配静态IP 这里必须写出主机名 IP地址可以在地址范围外面
? ?? ???host HYPER-V-WIN10 {? ?
? ?? ?? ?? ?? ? hardware ethernet 00:15:5d:0c:02:06;
? ?? ?? ?? ?? ? fixed-address 192.168.11.30;
? ?? ???}
}
#启动dhcp服务端
service dhcpd start
#设置开机自动启动
chkconfig dhcpd on

#查询已经分配的客户端(重启dhcpd这里分配的信息会被清空)
cat /var/lib/dhcpd/dhcpd.leases

550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
6#
?楼主| 发表于 2018-5-11 04:56 | 只看该作者
第三步:安装DNS服务端dnsmasq

yum install dnsmasq -y

默认的配置文件是/etc/dnsmasq.conf
但是我建议不要直接编辑这个文件,这个文件里面有配置说明,直接把所有需要的配置放到/etc/dnsmasq.d/这个目录下
关于/etc/dnsmasq.d这个目录的作用,请查看配置文件的最后几行,默认情况下/etc/dnsmasq.d/这个目录下所有的文件里面的内容都相当于直接添加在配置文件里面的,有点类似于php的include的效果

建议改为只把.conf后缀的文件内容添加进去,方法如下:
修改/etc/dnsmasq.conf结尾那几行,按照下面的修改就行了,其实就是注释掉最后一句,把倒数第三句取消注释
# Include all files in a directory which end in .conf
conf-dir=/etc/dnsmasq.d/,*.conf
# Include all files in /etc/dnsmasq.d except RPM backup files
#conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig

然后我们就可以正式开始配置了

第一步:设置DNS和DHCP的监听端口
echo "interface=eth0" >> /etc/dnsmasq.d/config.conf

第二步:设置DNS的上游解析服务器
echo "resolv-file=/etc/dnsmasq.d/nameserver" >> /etc/dnsmasq.d/config.conf
echo "nameserver 240C::6666" >> /etc/dnsmasq.d/nameserver
echo "nameserver 114.114.114.114" >> /etc/dnsmasq.d/nameserver
echo "nameserver 240C::6644" >> /etc/dnsmasq.d/nameserver
echo "nameserver 114.114.115.115" >> /etc/dnsmasq.d/nameserver

选配NS服务器自定义解析
echo "addn-hosts=/etc/dnsmasq.d/hosts" >> /etc/dnsmasq.d/config.conf
echo "127.0.0.1 localhost" >> /etc/dnsmasq.d/hosts
echo "::1 localhost" >> /etc/dnsmasq.d/hosts
echo "127.0.0.1 test.abc.com" >> /etc/dnsmasq.d/hosts
添加了自定义解析以后要重启dnsmasq服务才会生效
(好像就算加了这个/etc/hosts的解析也会生效)
echo "127.0.0.1 test.abc.com" >> /etc/hosts
echo "127.0.0.1 test.def.com" >> /etc/hosts




第三步:设置DHCP的地址范围和时间
第一小步:设置IPV4的DHCP
echo "dhcp-range=192.168.11.100,192.168.11.200,12h" >> /etc/dnsmasq.d/config.conf

选配:配置IP-MAC绑定
dhcp-host=11:22:33:44:55:66,192.168.0.60

第二小步:设置IPV6的DHCP(这个没有成功,暂时还在研究,感觉IPV6好麻烦啊)
echo "enable-ra" >> /etc/dnsmasq.d/config.conf



好像这样就行了,这样默认是DNS开启,然后DHCP网关指向的是eth0接口的IP

最后把服务设置为开机自动启动
chkconfig dnsmasq on或者systemctl enable dnsmasq.service



systemctl restart dnsmasq.service
systemctl status dnsmasq.service


##############下面的是我以前用的



















http://blog.51cto.com/yanconggod/1977598
https://jingyan.baidu.com/article/455a99504bca8da16727784a.html
https://www.jianshu.com/p/71ccc79aaa9e??建议参考这个网址

yum install dnsmasq -y
编辑配置文件/etc/dnsmasq.conf
vi /etc/dnsmasq.conf

修改如下??
第一个地址是服务器的内网网卡的IP地址,即只监听发送到这个IP地址的DNS请求,127是必须加上的
listen-address=192.168.11.21,127.0.0.1
修改缓存大小默认是150太小了 缓存的意思是你查询过以后就会根据上游服务器提供的ttl,缓存到本地,比如我的www.rongyaozhilian.com的缓存时间是10分钟(我在阿里云里面设置的),如果我访问了,则这个dnsmasq会缓存10分钟,就不用每次都查询上游DNS服务器了
cache-size=10000??#其实这个缓存作用也不是很大,现在很多系统都是默认自带缓存了,比如windows系统在你查询以后会自动缓存的
设置上游DNS
resolv-file=/etc/resolv.dnsmasq.conf
echo "nameserver 114.114.114.114" > /etc/resolv.dnsmasq.conf
设置本地hosts解析文件,每次修改以后都需要重启dnsmasq生效? ?例如你可以直接在本地把www.abc.com解析到1.1.1.1(这个选项不开的话查询的就是/etc/hosts)(其实这个可以不开启的,开启了唯一的好处就是服务器和客户端分开了)
addn-hosts=/etc/dnsmasq_hosts
cp /etc/hosts /etc/dnsmasq_hosts
echo "1.1.1.2 a.defg.com" >> /etc/dnsmasq_hosts

service dnsmasq start
chkconfig dnsmasq on

关于/etc/dnsmasq.d这个目录的作用,这个目录下的所有.conf文件里面的内容都相当于是直接添加到了/etc/dnsmasq.conf里面(有点类似于php里面include的效果)
设置泛解析文件(修改了以后需要重启dnsmasq才能生效)
echo "address=/www.abc.com/1.1.1.2" >> /etc/dnsmasq.d/address.conf #泛域名正向解析? ?客户端解析www.abc.com或者a.[url=http://www.abc.com都是解析到1.1.1.2]www.abc.com都是解析到1.1.1.2[/url]
echo "ptr-record=1.1.1.2.in-addr.arpa,www.abc.com" >> /etc/dnsmasq.d/address.conf??#反向解析(可选)

设置特殊域名走特定的dns服务器
echo "server=/google.com/8.8.8.8" >> /etc/dnsmasq.d/server.conf #所有*.google.com的解析全部转发到8.8.8.8这个DNS服务器来进行解析,有什么作用自己想


(dnsmasq也可以当作DHCP用,但是个人不建议这样做,最好还是分开)




550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
7#
?楼主| 发表于 2018-5-12 12:16 | 只看该作者

第四步:安装PPPOE客户端(如果WAN口需要拨号的话)

https://www.cnblogs.com/gotodsp/p/5513945.html #参考这个教程

1、搜寻PPPoE相关软件,本人使用的是rp-pppoe
  yum search pppoe
2、使用yum安装rp-pppoe
  yum install rp-pppoe -y
3、开始配置PPPoE连接
  pppoe-setup
4、输入ISP提供的账户
5、输入以太网卡代号,默认是eth0(注:CentOS 7已不是默认eth0,自行使用ifconfig命令即可找到)
6、配置:若长时间连线,连线会被自动中断(我不干,选no)
7、配置主DNS服务器
8、配置次DNS服务器
9、两次输入账户密码以确认
10、配置普通账户是否有网络连接权限
11、配置防火墙(没有特殊需求选0就OK)
12、配置是否开机自动拨号连接
13、确认刚填写的配置信息
14、连接网络尽情享受吧!
相关命令@ 连接网络:/sbin/ifup ppp0,断开连接:/sbin/ifdown ppp0,查看网络状态:/sbin/pppoe-status

用HYPER-V最好把mac地址设置为静态的,关机设置
然后重启就好了,系统会自动拨号,而且掉了会自动重播

550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
8#
?楼主| 发表于 2018-5-12 17:43 | 只看该作者
到这里已经可以用了,目前用着还行,好像比路由器反应快很多

但是翻墙还没有设置,下面教两种方式 第一种就是全局翻墙模式,即这个路由器下所有的客户端都默认能翻墙

第二种是设置cow代理服务器,chrome浏览器使用switchyomega自动代理

550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
9#
?楼主| 发表于 2018-5-15 21:27 | 只看该作者
第五步:ss
服务端
yum install python-setuptools && easy_install pip
pip install shadowsocks
pip install --upgrade pip

ssserver -p 1281 -k password -m aes-256-cfb -d start

客户端
wget https://copr.fedorainfracloud.or ... owsocks-epel-7.repo
mv librehat-shadowsocks-epel-7.repo /etc/yum.repos.d/
yum -y install epel-release
yum install -y shadowsocks-libev
安装完毕以后还需要设置一个软链接
#ln -s /usr/lib/libmbedcrypto.so.1 /usr/lib/libmbedcrypto.so.0
ln -s /usr/lib64/libmbedcrypto.so.1 /usr/lib64/libmbedcrypto.so.0


然后添加配置文件
vi /etc/shadowsocks-libev/config.json
{
? ? "server": "48.76.150.172",
? ? "server_port": 1490,
? ? "password": "password",
? ? "method": "aes-256-cfb",
? ? "local_address": "0.0.0.0",
? ? "timeout": 60,
? ? "reuse_port": true
}

就可以使用命令了 前两条命令不知道是不是重复了,反正这样添加能实现代理
ss-redir -c /etc/shadowsocks-libev/config.json -l 1081 --mtu 1492 -f /var/run/ss-redir-cfg054a8f.pid
#ss-redir -c /etc/shadowsocks-libev/config.json -U -l 1081 --mtu 1492 -f /var/run/ss-redir-udp-cfg054a8f.pid??#这一条可以不要,没必要-U,因为iptables转发根本就没转发udp
ss-tunnel -c /etc/shadowsocks-libev/config.json -u -l 5353 -L 8.8.8.8:53 --mtu 1492 -f /var/run/ss-tunnel-cfg054a8f.pid


然后设置端口转发
vi bendi.zone
172.16.0.0/12
100.64.0.0/10
203.0.113.0/24
192.31.196.0/24
192.52.193.0/24
192.88.99.0/24
10.0.0.0/8
224.0.0.0/4
192.0.2.0/24
198.51.100.0/24
127.0.0.0/8
198.18.0.0/15
0.0.0.0/8
192.0.0.0/24
169.254.0.0/16
192.168.0.0/16
240.0.0.0/4
192.175.48.0/24
48.76.150.172??#注意这里这个IP是ss服务器的IP,根据需要来修改
255.255.255.255

cd /etc/rc.d/rc.local.d/
vi peizhiipset.sh
ipset create GUONEI hash:net
? ?? ???while read line
? ?? ???do
? ?? ?? ?? ?? ? ipset add GUONEI $line
? ?? ???done < /etc/rc.d/rc.local.d/cn.zone

ipset create BENDI hash:net
? ?? ???while read line
? ?? ???do
? ?? ?? ?? ?? ? ipset add BENDI $line
? ?? ???done < /etc/rc.d/rc.local.d/bendi.zone

上面的while循环需要一个文件all-zones.tar.gz??这个我忘记是从哪里下载的了,记录了所有国家的IPV4的地址段的分配情况 cn.zone就是中国的

#prerouting表
#本地的tcp dst全部return
iptables -t nat -A PREROUTING -m set --match-set BENDI dst -j RETURN
#guonei的dst也是全部return
iptables -t nat -A PREROUTING -m set --match-set GUONEI dst -j RETURN
#剩余的就是tcp的端口转发了
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 1081

#OUTPUT表? ?? ?这个表其实应该可以不用我实测貌似不用也没关系
#bendi的dst全部return
iptables -t nat -A OUTPUT -m set --match-set BENDI dst -j RETURN
#guonei的dst也全部return
iptables -t nat -A OUTPUT -m set --match-set GUONEI dst -j RETURN
#剩余的就是转发的
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 1081




个人并不推荐使用这种方式,这种方式是使用iptalbes的,使用firewall应该也能实现ipset,不过我还没有研究
这种是所有访问国外IP的流量都走ss,其实只是偶尔需要翻墙,平时大部分时间都是不需要的,个人更建议使ss-local 然后浏览器添加代理就行了

550

主题

957

帖子

4414

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4414
10#
?楼主| 发表于 2018-5-16 20:14 | 只看该作者
补充1:/etc/resolv.conf 被还原解决办法
https://blog.csdn.net/q_l_s/article/details/50729805

今天一台服务器上不了网,设置了nameserver,重启后/etc/resolv.conf文件就被自动还原了,最后发现是被Network Manager修改了。
解决方法:
停止Network Manager服务

service NetworkManager stop
重启网络服务

/etc/init.d/network restart
彻底废掉Network Manager

chkconfig NetworkManager off
修改网卡配置

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"??//指出设备名称
BOOTPROTO="tatic"??//获取ip类型 dhcp或static DHCP动态分配或静态设置??
HWADDR="00:22:15:3A:F4:7E"??//MAC地址
BROADCAST=192.168.1.255??//广播地址
IPADDR=192.168.1.4??//ip地址
NETMASK=255.255.255.0??//子网掩码
GATEWAY=192.168.1.3??//网关
NM_CONTROLLED="no"??//是否允许Network Manager管理,当然NO啦!废掉Network Manager了都!
ONBOOT="yes"//系统启动的时候网络接口是否有效
TYPE="Ethernet"//网络类型
现在再编辑 /etc/resolv.conf 添加要使用DNS,以Google为例:

nameserver 8.8.8.8
nameserver 8.8.4.4
保存并重启网络服务即可

service network restart

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

荣耀之链 ( 鄂ICP备13014567号-2 )

GMT+8, 2019-10-15 14:10365体育让提款吗 , Processed in 0.019936 second(s), 19 queries .

Powered by Discuz! X3.4

? 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表