荣耀之链论坛

 找回密码
 立即注册
搜索
查看: 13131|回复: 20

centos 当软路由

[复制链接]

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
发表于 2018-5-5 18:46 | 显示全部楼层 |阅读模式
这个帖子很多错误或者过时的东西 选看

2020-04-13再次总结:
最后决定还是采用centos1708来当软路由
具体部署过程请看3 4 6 10楼 其他楼层有的是无用楼层,有的是暂时不需要用到的



总结:测试过了,延迟和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,我改用自己的规则以后端口转发就一切正常了  





回复

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 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就足够了)

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2018-5-6 01:39 | 显示全部楼层
vi /etc/sysconfig/selinux
改为disabled

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

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

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

这个服务看情况吧,其实应该是可以不用停的
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2018-5-6 21:59 | 显示全部楼层
第一步:开启转发
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
就这2句,服务器重启依然有效

然后需要把不同的接口放到不同的zone
#把eth0加入到trusted  (因为这个是内网接口,直接trust最简单,如果加入到internal的话还是需要设置各种通过语句,太麻烦)
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=trusted

不要用trusted
这个zone类型有问题  我实测把网卡改为trusted 经常出莫名其妙的问题
改为public 然后手动放行防火墙以后就再也没出过问题了




下面是是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地址就能上网了




回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 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

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 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

选配:DNS服务器自定义解析,这个的作用就是比如把www.abc.com解析到自己定义的IP地址
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

第三步:设置DHCP的服务器名字,默认网关和DNS
echo "domain=centos7" >> /etc/dnsmasq.d/config.conf
echo "dhcp-option=option:router,192.168.11.3" >> /etc/dnsmasq.d/config.conf
echo "dhcp-option=option:dns-server,192.168.11.3,223.6.6.6" >> /etc/dnsmasq.d/config.conf


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

选配,记录日志log-queries
log-facility=/tmp/dnsmasq.log

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



systemctl restart dnsmasq.service
systemctl status dnsmasq.service

补充:DHCP的租约信息保存在下面的文件里面
cat /var/lib/dnsmasq/dnsmasq.leases
补充2:建议开启缓存
  1. # 开启cache(size上限10000),默认没有开启
  2. cache-size=1000
  3. # 不缓存失败的结果
  4. no-negcache
复制代码



更多设置可以看这里https://cloud.tencent.com/developer/article/1174717
##############下面的是我以前用的,可以看看,貌似没啥用了



















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.ryzl.com.cn的缓存时间是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服务器来进行解析














回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 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地址设置为静态的,关机设置
然后重启就好了,系统会自动拨号,而且掉了会自动重播

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2018-5-12 17:43 | 显示全部楼层
到这里已经可以用了,目前用着还行,好像比路由器反应快很多

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

第二种是设置cow代理服务器,chrome浏览器使用switchyomega自动代理
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2018-5-15 21:27 | 显示全部楼层
第五步:ss
服务端
yum install python-setuptools && easy_install pip   [yum install platform-python-setuptools 2022-06-29前一条命令必须这样了]
pip install shadowsocks
pip install --upgrade pip

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

客户端 [2022-06-29 用linux当客户端的新方法还没找到,不确定这个方法是否过时]
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


###################
服务端
/usr/local/lib/python3.6/site-packages/shadowsocks/crypto/openssl.py
搜索CIPHER_CTX_cleanup,应该有两处,替换为CIPHER_CTX_reset,然后保存文件。


客户段
ll /usr/lib64/libmbedcrypto.so.*
先查看有哪些文件 我这次新装文件名是/usr/lib64/libmbedcrypto.so.2.28.0
然后他需要so.2就建立一个软链接
ln -s /usr/lib64/libmbedcrypto.so.2.28.0 /usr/lib64/libmbedcrypto.so.2
最后再启动就行了
失败,我不知道是阿里云的问题还是ss的问题
首先,ssserver必须用443端口,否则tcp的监听端口起不来
其次,都弄好了,但是还是不能连接 不知道是加密方式有问题还是网络问题

看来别用这个了
###################

然后添加配置文件
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 然后浏览器添加代理就行了


SS已经不行了
使用其他方式吧
关于iptables全局转发国外IP的方法补充:
iptables -t nat -N SSHTNAT

#从cn.zone文件里面读取国内的IP段
ipset create GUONEI hash:net

while read line
do
        ipset add GUONEI $line
done < /etc/rc.d/rc.local.d/cn.zone

#ipset list GUONEI |wc -l
#把国内的IP都走本地
iptables -t nat -I SSHTNAT 1 -m set --match-set GUONEI dst -j RETURN
#私有地址也走本地
iptables -t nat -A SSHTNAT -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SSHTNAT -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SSHTNAT -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SSHTNAT -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SSHTNAT -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SSHTNAT -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SSHTNAT -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SSHTNAT -d 240.0.0.0/4 -j RETURN
iptables -t nat -A SSHTNAT -d 服务器ip -j RETURN  #把服务器的IP排除


#其他的都重定向到1081
iptables -t nat -A SSHTNAT -p tcp -j REDIRECT --to-ports 1081
iptables -t nat -A SSHTNAT -p udp -j REDIRECT --to-ports 1081

iptables -t nat -I PREROUTING 1 -j SSHTNAT  #所有协议都走这里
说明:一些网站对安全要求比较高的话,用NAT模式会提示证书有问题,这个时候把域名加入到switchyomega代理列表就行了

猜测可能是nat转一道的话会有数据更改,估计8.8.8.8不能解析也是这个原因



回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 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

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2019-2-10 22:15 | 显示全部楼层
http://www.linuxdiyf.com/linux/29259.html

最后一步:使内部的电脑可以使用pptp
安装这几个模块
modprobe nf_nat_pptp注意:服务器重启以后就需要重新安装这个模块
可以放在启动脚本里面自动执行

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2019-6-29 21:07 | 显示全部楼层
centos 6.10
修改nf_conntrack_tcp_timeout_established时间
默认是5天,感觉太长了,改为7200秒
cd /proc/sys/net/netfilter
其他的感觉都不用改,就下面两个可能需要改

cat nf_conntrack_tcp_timeout_established  这个是调节连接如果不发送数据最长存在时间,我感觉默认的5天太长了,我的应用基本上不需要这么长,改为7200吧,openwrt就是这个数值,2个小时不发送数据的链接我感觉就是可能是死链接了

cat nf_conntrack_max
这个是最多的转发条数,默认是65536,足够用了,没有必要增加了




#修改转发相关参数
https://yq.aliyun.com/articles/555502
sysctl -a | grep nf_conntrack
优化参数
状态跟踪表的最大行数的设定,理论最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
以64G的64位操作系统为例,CONNTRACK_MAX = 64*1024*1024*1024/16384/2 = 2097152
即时生效请执行:
sysctl –w net.netfilter.nf_conntrack_max = 524288  (16G)
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7200  #等号不能有空格
阿里云的建议是调为下面这样
  1. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established  =  3600   
  2. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait  =  60   
  3. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait  =  120   
  4. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait  =  120
复制代码


回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2019-7-21 11:22 | 显示全部楼层
我自己的服务器设定是这样的

  1. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
  2. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
  3. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
  4. sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300
复制代码


如果要让服务器重启以后也生效则用如下命令vi /etc/sysctl.d/sysctl.conf
然后粘贴
net.ipv6.conf.all.forwarding=1
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300
然后保存退出
然后执行命令
sysctl -p /etc/sysctl.d/sysctl.conf
使这几条生效




查看已经活跃的转发链接
cat /proc/net/nf_conntrack


我是根据这个文章来弄的
https://www.cnblogs.com/xiangsikai/p/9525287.html

Linux 跟踪连接netfilter 调优
Netfilter介绍

    linux内核中的netfilter是一款强大的基于状态的防火墙,具有连接跟踪(conntrack)的实现。conntrack是netfilter的核心,许多增强的功能,例如,地址转换(NAT),基于内容的业务识别(l7, layer-7 module)都是基于连接跟踪。

    nf_conntrack模块在kernel 2.6.15(2006-01-03发布) 被引入,支持ipv4和ipv6,取代只支持ipv4的ip_connktrack,用于跟踪连接的状态,供其他模块使用。

主要参数介绍

复制代码
# 哈希表大小(只读)(64位系统、8G内存默认 65536,16G翻倍,如此类推)
net.netfilter.nf_conntrack_buckets

# 最大跟踪连接数,默认 nf_conntrack_buckets * 4
net.netfilter.nf_conntrack_max
net.nf_conntrack_max
复制代码
注:跟踪的连接用哈希表存储,每个桶(bucket)里都是1个链表,默认长度为4KB
注:netfilter的哈希表存储在内核空间,这部分内存不能swap
注:哈希表大小 64位 最大连接数/8  32 最大连接数/4
注:32位系统一条跟踪几率约为300字节。
注:在64位下,当CONNTRACK_MAX为 1048576,HASHSIZE 为 262144 时,最多占350多MB
状态查看

1、查找:buckets哈希表大小,max最大几率的连接条数

# netfilter模块加载时的bucket和max配置:
sudo dmesg | grep conntrack
结果
2、查找:哈希表使用情况

# 前4个数字分别为:当前活动对象数、可用对象总数、每个对象的大小(字节)、包含至少1个活动对象的分页数
grep conntrack /proc/slabinfo
结果
3、查找:当前跟踪的连接数

sudo sysctl net.netfilter.nf_conntrack_count
cat /proc/net/nf_conntrack | wc -l
4、跟踪连接详细信息

cat /proc/net/nf_conntrack
结果说明
连接跟踪调优

计算公式
CONNTRACK_MAX(最大几率的连接条数) = 内存个数*1024*1024*1024/16384/2 = ***
Buckets(哈希表大小) = CONNTRACK_MAX/4 = ***(Byte字节)
跟踪数暂用最内存大小 = CONNTRACK_MAX * 300(Byte字节)= ***(Byte字节)
注:如果不能关掉防火墙,基本思路就是,调大nf_conntrack_buckets和nf_conntrack_max,调小超时时间。
注:除了有关联的参数,尽量一次只改一处,记下默认值,效果不明显或更差就还原。

1、哈希表桶大小 调优

注:net.netfilter.nf_conntrack_buckets 不能直接改(报错)

复制代码
# 临时生效
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize
------------------------------------------------------

# 重启永久生效
新建文件:/etc/modprobe.d/iptables.conf
options nf_conntrack hashsize = 32768
复制代码
2、最大追踪连接数修改 调优

复制代码
# 临时生效
sudo sysctl -w net.netfilter.nf_conntrack_max=1048576
suod sysctl -w net.nf_conntrack_max=1048576

------------------------------------------------------

# 永久生效
# 添加修改内核配置文件(/etc/sysctl.conf)
net.netfilter.nf_conntrack_max=1048576
net.nf_conntrack_max=1048576

# 如果要马上应用配置文件里的设置:
sudo sysctl -p /etc/sysctl.conf
复制代码
3、响应时间 调优

复制代码
# 临时生效

# 主动方的最后1个状态。默认120秒
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

# CLOSE_WAIT是被动方收到FIN发ACK,然后会转到LAST_ACK发FIN,除非程序写得有问题,正常来说这状态持续时间很短。#默认 60 秒
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=15

# 理论上不用这么长,不小于 net.ipv4.tcp_keepalive_time 就行了。默认 432000 秒(5天)
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300

-----------------------------------------------------

# 永久生效
# 修改内核配置文件(/etc/sysctl.conf)
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300

# 如果要马上应用配置文件里的设置:
sudo sysctl -p /etc/sysctl.conf
复制代码
禁用连接跟踪模块

注:只要iptables还有规则用到nat和state模块,就不适合关掉netfilter,否则这些规则会失效。

# 条件举例
# 关掉netfilter会拿不到状态,导致每个请求都要从头到尾检查一次,影响性能:
# 例如这条默认规则(通常写在第1条或很靠前的位置):
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
禁用步骤

1、整理确认关闭该模块后不会影响功能

复制代码
# 1
# 查找相关模块
sudo lsmod | egrep "ip_table|iptable|nat|conntrack"

# 2
# 把带 -t nat 、-m state 的规则都干掉
# 或删掉 /etc/sysconfig/iptables 里相应内容
# 查看iptables规则
sudo iptables-save

# 3
# 编辑 iptables 配置文件
# 找到 IPTABLES_MODULES ,删掉跟conntrack有关的模块(如果有)
sudo vim /etc/sysconfig/iptables-config

# 4
# 停掉iptables
# Centos 6
sudo service iptables stop
# Centos 7
sudo systemctl stop iptables
复制代码
2、移除相关模块

复制代码
sudo rmmod iptable_nat
sudo rmmod ip6table_nat
sudo rmmod nf_defrag_ipv4
sudo rmmod nf_defrag_ipv6
# 移除相关模块
sudo rmmod nf_nat
sudo rmmod nf_nat_ipv4
sudo rmmod nf_nat_ipv6
sudo rmmod nf_conntrack
sudo rmmod nf_conntrack_ipv4
sudo rmmod nf_conntrack_ipv6
sudo rmmod xt_conntrack

--------------------------

# 开启相关模块
sudo modprobe iptable_nat
sudo modprobe ip6table_nat
sudo modprobe nf_defrag_ipv4
sudo modprobe nf_defrag_ipv6
sudo modprobe nf_nat
sudo modprobe nf_nat_ipv4
sudo modprobe nf_nat_ipv6
sudo modprobe nf_conntrack
sudo modprobe nf_conntrack_ipv4
sudo modprobe nf_conntrack_ipv6
sudo modprobe xt_conntrack


回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2019-7-26 00:41 | 显示全部楼层
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300
sysctl -w net.netfilter.ip_conntrack_tcp_timeout_established=3600

nf表示是转发相关的(用于软路由的转发)
ip表示是服务器接收相关的
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2020-7-7 03:50 | 显示全部楼层
最后补上一个使用IPV6的
光猫有IPV6了,路由器的WAN口也可以获取到IPV6地址
然后本来IPV6的作用是内部所有客户端都获得一个公网V6IP的(网建的路由器开启ipv6穿透模式就是这样的),但是这个模式有个弊端就是光猫下面会产生多个客户端,电信的后台应该会限制客户端数量,所以我个人觉得还是用ipv6的时候也使用NAT比较好

即路由器的WAN口是公网的IPV6地址,LAN口是内网的IPV6地址,然后内部的客户端也是内网的IPV6地址
路由器的工作模式和IPV4一样使用NAT转发,这样更安全

相关操作如下:(这些操作是在上面的IPV4已经可以正常使用的情况下再操作)
第一步:LAN口设置静态IPV6地址
IPV6ADDR=fec0::3/64

第二步:dnsmasq开启ipv6的DHCP
dhcp-range=FEC0::, ra-stateless
下面这条是表示把LAN口地址当默认的IPV6 DNS
dhcp-option=option6:dns-server,[::]
下面这条是默认路由 这样写貌似是V4和V6同时生效
dhcp-option=3

第三步:使设置生效
service dnsmasq restart
service network restart
(这里建议把networkmanger服务打开)

第四步:开启路由器的ipv6转发
sysctl -w  net.ipv6.conf.all.forwarding=1

第五步:开启防火墙的IPV6 NAT功能(这条语句需要在每次防火墙reload以后重新输入)
ip6tables -t nat -I POSTROUTING 1 -j MASQUERADE
(这里必须这样开启,实测firewall-cmd这个命令开启的MASQUERADE是IPV4的)(这样开启以后就可以上纯IPV6网站了,http://www.test-ipv6.com/ 就可以通过了 然后目前淘宝还是只有主页能看,登录界面还是纯V4)
(另外还有个问题,ping不通 显示一般故障)(然后bing的主页异常,看来这种NAT6的模式不怎么样,用于端口转发还行,但是用于上网还是算了吧)

就可以了
客户端就可以获取到IPV6的地址了,是FEC0开头的地址
客户端某些时候不能ping通一些V6IP地址,不知道是什么问题,暂时有待观察这个IPV6的

端口转发设置如下

#端口转发
firewall-cmd --zone=external --permanent --add-forward-port=port=8080:proto=tcp:toaddr=192.168.11.3:toport=80
firewall-cmd --zone=external --add-forward-port=port=8080:proto=tcp:toaddr=192.168.11.3:toport=80
# 由于不知道firewall的IPV6端口转发是怎么弄的,所以这里用ip6tables
ip6tables -t nat -I PREROUTING 1 -i eth1 -p tcp --dport 8080 -j DNAT --to [FEC0::2]:80#这个就是转发,把访问eth1的8080端口转发到内部的客户端


这个方法有bug,同一个外网ip只能被一个内网客户端ping通,但是访问是都没有问题的,估计ping需要特殊设置



回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2020-7-7 04:03 | 显示全部楼层
目前还需要解决的问题是怎么解决DNS污染问题
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2020-11-24 22:42 | 显示全部楼层
cat /proc/net/nf_conntrack
查看转发表
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2021-1-3 00:47 | 显示全部楼层
天又研究了几个小时的IPV6
并且用hyper-v安装了最新的openwrt 19.07
结果是openwrt的ipv6是正常的
但是centos7的IPV6死活弄不对,还是只能按照上面的NAT转发弄
蛋疼,算了,继续用openwrt了
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2022-9-20 06:06 | 显示全部楼层
ipv6分流


  1. ipset create IPV6BENDI hash:net family inet6

  2. while read line
  3. do
  4.         ipset add IPV6BENDI $line
  5. done < /root/ssht/fenliu/ipv6.zone

  6. ip6tables -t nat -A PREROUTING -i eth0 -m set --match-set IPV6BENDI dst -j RETURN
  7. ip6tables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dport 80,443 -j REDIRECT --to-ports 1082
复制代码


路由器LAN口的ipv6地址手动配置
cd /etc/sysconfig/network-scripts/
IPV6ADDR=fd00::21/8

然后客户机的IPV6地址也手动添加
IPV6ADDR=fd00::22/8
IPV6_DEFAULTGW=fd00::21%eth0  #注意最后这个%可以不写 表示是通过哪个接口
DNS2=fd00::21
网关指向路由器
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2022-9-25 10:17 | 显示全部楼层
https://taczanowski.net/linux-bo ... laac-and-dhcpv6-pd/

这个是centos当软路由 同时可以自动获取PD然后用dnsmasq分配的教程
比较麻烦

现在openwrt的很多动能都有了 可以满足我的需求了,已经不用centos当软路由了
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-11-13 18:04 | 显示全部楼层
用路由表打标数据包分流的方法
查看linux板块 wireguard的那个帖子  
回复 支持 反对

使用道具 举报

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

本版积分规则

荣耀之链

GMT+8, 2025-6-18 06:51 , Processed in 0.019322 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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