debian下搭建家庭网关再体验
背景
在路由器的基础上,增加一个linux网关,用来更精细的控制流量。拓扑如下:
其中路由器和网关之间是千兆网速连接,Speed: 1000Mb/s。
再体验
开启转发
开启转发后,N1节点可以做为网关,供其它节点上网使用。
开启转发的方法如下:
在网关上,开启forward转发
# 系统设置
sysctl -w net.ipv4.ip_forward=1
# FORWARD链
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
确认成功
将电脑的网关改为 192.168.1.2
ping正常
ping www.baidu.com
PING www.a.shifen.com (182.61.200.6): 56 data bytes
64 bytes from 182.61.200.6: icmp_seq=0 ttl=53 time=7.768 ms
traceroute正常,第一跳已经为N1节点。
% traceroute www.baidu.com
traceroute: Warning: www.baidu.com has multiple addresses; using 182.61.200.6
traceroute to www.a.shifen.com (182.61.200.6), 64 hops max, 52 byte packets
1 * * n1 (192.168.1.2) 2.677 ms
2 r7000 (192.168.1.1) 2.118 ms 1.427 ms 2.081 ms
缓存DNS
缓存DNS,可以支持自定义域名/ip解析,也可以将特定的域名标记为ipset。
安装
sudo apt-get install dnsmasq
如果要增加自定义解析规则,则编辑文件 /etc/dnsmasq.conf
,在尾部如下:
address=/r7000.home/192.168.1.1
address=/n1.home/192.168.1.2
address=/pc.home/192.168.1.3
测试
dig pc.home @192.168.1.2
结果
;; ANSWER SECTION:
pc.home. 0 IN A 192.168.1.2
squid
squid可以将静态资源进行缓存,使后面的访问更快,流量更小。
安装
apt-get install squid
允许本地网络访问,修改配置文件 /etc/squid/squid.conf
,如下:
http_access allow localnet
#http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
增加磁盘缓存
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 100 16 256
重启服务
/etc/init.d/squid reload
日志文件 /var/log/squid/access.log
启用透明代理(未完成)
启动透明代理后,会自动将请求转发到squid上,而不用在设备段单独配置代理。
未完成
按域名路由
在本节中,我们引入了一个ECS节点moon,对指定域名的流量提供加速访问。
如下图所示,我们将ECS和N1组成了一个 192.168.2.* 网段的虚拟网段。
先复习一下 iptables, route的相关知识[6]。
iptables中默认有3个表:filter表、nat表和mangle表。
- filter表:数据包过滤
- nat表:地址转换
- mangle表:数据包特殊处理
filter表中有三个链:INPUT, OUTPUT, FORWARD
nat是一个路由器,其表中还有两条新链:PREROUTING和POSTROUTING
SNAT在包离开之前,改变源地址,如:
iptables -t nat -A POSTROUTING -o eth1 -s 10.1.1.0/24 -j SNAT --to-source 11.12.13.14
IP伪装 (IP masquerading)与SNAT相似,但适用于动态接口,如路由器中每次连接到互联网时isp会分配不同的ip地址。
iptables -t nat -A POSTROUTING -o eth1 -s 10.1.1.0/24 -j MASQUERADE
DNAT将互联网的数据包重定向到内部服务器中,允许互联网用户访问内部服务,如:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j DNAT --to-destination 10.1.1.99
将域名标记为ipset
第一步,通过dnsmasq,将域名标记为ipset。ipset可以供后续的ip route进行路由。
[2]
- 安装配置ipset,创建集合
apt-get install ipset
使用
创建一个集合(SETNAME)
ipset create outmoon hash:net
查询集合内容
ipset list outmoon
删除集合
ipset destroy outmoon
可以也在系统启动时,来自动创建对应的 ipset。
ipset create outmoon hash:net
- 通过dnsmasq,绑定域名到ipset中的集合
修改文件 /etc/dnsmasq.conf
,增加内容如下:
ipset=/google.com/outmoon
这时,如果 dnsmasq
中有过 google.com
的域名解析,则会将对应的ip记录到outmoon
中。
所以,记着将本机的域名解析地址中,增加本机地址。
- 配置路由表
在路由表中,增加集合名称,修改文件 /etc/iproute2/rt_tables
,增加
80 outmoon
其中前面的数字不要和已有的重复了。
查看table outmoon下的路由:
# ip route list table outmoon
先手动测试路由表
设置路由
route del 182.61.200.6/32 gw 192.168.2.1
route add 182.61.200.6/32 gw 192.168.2.1
设置成功后,在PC上可以ping通182.61.200.6,抓包可以确认路由到了moon节点上。
再批量测试路由 [7]
iptables -t mangle -N fwmark
iptables -t mangle -A OUTPUT -j fwmark
iptables -t mangle -A PREROUTING -j fwmark
iptables -t mangle -A fwmark -m set --match-set outmoonip dst -j MARK --set-mark 8
ip rule add fwmark 8 table outmoon
ip route del default via 192.168.1.1 table outmoon
ip route add default via 192.168.1.1 table outmoon
iptables -t nat -A POSTROUTING -m set --match-set outmoonip dst -o ethx -j SNAT --to 192.168.1.2
按域名转发到ss
见[1]
按域名转发到v2ray
见[3]
策略路由
[5]
设置指定设备的网关
[8]
1.新建并编辑文件dnsmasq.conf.add,保存于/jffs/configs/目录下。
vi /jffs/configs/dnsmasq.conf.add
2.dnsmasq.conf.add添加以下内容(设置标签为openwrt的网关与DNS服务器地址,另外,指定MAC地址的设备分配到openwrt标签的网关与DNS)
dhcp-option=tag:openwrt,option:router,192.168.50.2
dhcp-option=tag:openwrt,option:dns-server,192.168.50.2
dhcp-mac=set:openwrt,11:22:78:14:D3:0A #要指定的设备1的MAC地址
dhcp-mac=set:openwrt,00:11:22:63:3C:7E #要指定的设备2的MAC地址
3.保存重启dnsmasq
service restart_dnsmasq
备注
路由基本操作
增加路由
route add -net 192.168.99.99 netmask 255.255.255.255 gw 192.168.10.20
删除路由
route del -net 192.168.99.99 netmask 255.255.255.255 gw 192.168.10.20
参考
- OpenWrt VPN 按域名路由
- Linux | ipset命令介绍与基本使用
- openwrt通过v2ray+dnsmasq-full+ipset+gfwList实现自动翻墙
- 【网络】route和 IP route的区别|route 和 IP route 添加路由
- 策略路由
- Chapter 14. iptables firewall
- ip rule,ip route,iptables 三者之间的关系
- ASUS-Merlin 按设备分配网关
- openwrt通过v2ray+dnsmasq-full+ipset+gfwList实现自动翻墙
- 关于 TPROXY 透明代理使 V2Ray 占满 CPU 问题的研究