zhangguanzhang's Blog

proxmox x86软路由笔记

字数统计: 2.1k阅读时长: 9 min
2020/05/13

由来

pve已经安装好系统(如果你还没安装且打算安装,安装完后可以看看我这个文章安装完proxmox的一些设置),pve 的机器只有一个口子的情况下,就只能作为旁路由使用。

前置工作

虚机准备

先去恩山论坛x86版块下一个固件
pve上开台机器

  • 一般-高级-开机自启动勾上,有必要的话手动设置下vmID,后面有用
  • 操作系统不适用任何介质
  • 系统默认,下一步
  • 硬盘随便设置,后面会删除
  • cpu按照实际,我给2核,内存我给的2g
  • 网络,模型选VirtIO(半虚拟化)防火墙的勾去掉
  • 完成
  • 选中虚机,硬件-选中硬盘,点击分离,删除

导入img

把固件上传到 pve 的机器上,一般是 gz,解压成 img 后用命令转成 qcow2 文件

1
qemu-img convert -f raw  -O qcow2 openwrt-x86-64-generic-squashfs-combined-efi.img op.qcow2

检查下,应该输出No errors

1
qemu-img check op.qcow2

导入成硬盘,这里 vm 的 id 是对应前面的 vmid,前面没设置的话 web 控制台上看下 openwrt 的虚机的 vmid

1
qm importdisk 200 op.qcow2 local-lvm

导入后在界面上,选中创建机器带的硬盘,点击上面的分离,然后点击这个硬盘,点击删除。双击我们导入的硬盘,点击右下角的添加

后期pve加网卡在 openwrt 里 pppoe 拨号的话

要注意 pve 上有添加的网卡驱动否。其次 openwrt 的 wan 接口 pppoe 拨号不能显示成功后的mac地址的话。编辑配置文件/etc/config/network在你的 wan 下面给它加 mac:

1
option macaddr '4e:ec:61:48:1b:27'

旁路由的配置

路由静态ip配置

IP 规划为 192.168.2.3,主路由不开 DHCP,旁路由开DHCP(有的路由器不支持dhcp设置网关的ip,所以我这里旁路由作为DHCP server)

开机后大概36秒后按回车进入终端。更改旁路由的网络配置文件

1
2
cp /etc/config/network /etc/config/network.bak
vi /etc/config/network

192.168.1.1改为预期的配置,没网关的话就也加上预期的主路由的ip

1
2
3
4
5
6
config interface 'eth0'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.2.3'
option netmask '255.255.255.0'
option gateway '192.168.2.1'

重启网卡

1
/etc/init.d/network restart

然后按下回车,ping下114测下

1
ping 114.114.114.114

然后浏览器进192.168.2.3,默认密码admin password啥的试试

web配置

DHCP

我的固件只有一个LAN接口,不确定其他的是不是这样(推荐此处到最后都先看一遍完后再跟着操作)
网络-接口,进入LAN修改,下面的DHCP,开启动了。然后高级设置,动态DHCP+强制,写上掩码,下面的DHCP选项两行

1
2
3,192.168.2.3                    # 配置dhcp的网关,指向旁路由自己
6,192.168.2.3 # 配置dhcp获取到的dns,如果稳定则旁路由自己的IP

IPv6设置里前三个全部选禁用
保存应用

DNS

这里分为使用dnsmasqadguard home,我个人是使用adguard home的,我遇到过了dnsmasq经常在加配置的时候卡死,而且解析不稳定

dnsmasq作为dns server

网络-DHCP/DNS-常规设置,有必要的话配置下DNS转发,屏蔽一些激活码请求域名啥的,丢弃 RFC1918 上行响应数据这个取消了,我这儿是不然某些上游dns的域名无法访问到
最下面的写hosts列表,例如单独的指定公网ip下载jetbrains家的插件和软件,绕过前面配置的屏蔽

adguard home 作为dns server

如果固件没有的话去下载ipk文件 https://github.com/rufengsuixing/luci-app-adguardhome/releases 下载后在 web-系统-文件传输传上去, 然后ssh执行命令

1
opkg install /tmp/upload/luci-app-adguardhome_*

如果你当前的网络是已经连在这个旁路由上,那这步的关闭先别做,因为关闭了 dnsmasq 的 dns 就会无法解析域名导致无法下载后面的 adguard home 二进制文件。

大多数固件都不会自带 adgurad home 的二进制文件的,我们需要在自己pc上下载 adguardhome 的二进制文件在web-系统-文件传输传上去。下载网页,记得下载linux-amd64的

1
2
3
4
# 压缩包带了目录,所以直接解压到/usr/bin
tar zxf /tmp/upload/AdGuardHome_linux_amd64.tar.gz -C /usr/bin/
rm -f /tmp/upload/AdGuardHome_linux_amd64.tar.gz
touch /etc/config/AdGuardHome.yaml

服务-AdGuard Home-配置文件路径 改为 /etc/config/AdGuardHome.yaml

服务-AdGuard Home-手动设置,下面是我用的配置文件,web登录的密码是root,配置也可以参考 使用 AdGuard Home 自建 DNS 防污染、去广告 #2 - 优化增强设置详解教程

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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
bind_host: 0.0.0.0
bind_port: 3000
users:
- name: root
password: $2y$05$8h.LpbIR7U50.qbV7ynCtOvS9szcqu2lFk6J86Oabnz1J5BtLpVni
http_proxy: ""
language: ""
rlimit_nofile: 0
debug_pprof: false
web_session_ttl: 720
dns:
bind_host: 0.0.0.0
port: 53
statistics_interval: 1
querylog_enabled: false
querylog_file_enabled: true
querylog_interval: 1
querylog_size_memory: 1000
anonymize_client_ip: false
protection_enabled: true
blocking_mode: nxdomain
blocking_ipv4: ""
blocking_ipv6: ""
blocked_response_ttl: 10
parental_block_host: family-block.dns.adguard.com
safebrowsing_block_host: standard-block.dns.adguard.com
ratelimit: 0
ratelimit_whitelist: []
refuse_any: false
upstream_dns:
- https://dns.google/dns-query
- tcp://223.5.5.5
- https://dns.alidns.com/dns-query
- https://doh.pub/dns-query
- https://dns.adguard.com/dns-query
- https://dns-family.adguard.com/dns-query
#- sdns://AwAAAAAAAAAAAAANdGxzOi8vOC44LjguOA
#- sdns://AAAAAAAAAAAACTc3Ljg4LjguOA
#- sdns://AAAAAAAAAAAACjc3Ljg4LjguODg
#- sdns://AQMAAAAAAAAAFDE4NS4yMjguMTY4LjE2ODo4NDQzILysMvrVQ2kXHwgy1gdQJ8MgjO7w6OmflBjcd2Bl1I8pEWNsZWFuYnJvd3Npbmcub3Jn
#- sdns://AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk
#- sdns://AwAAAAAAAAAAAAANdGxzOi8vOS45LjkuOQ
bootstrap_dns:
- 223.5.5.5
- 223.6.6.6
- 8.8.4.4
- 9.9.9.10
- 149.112.112.10
all_servers: true
fastest_addr: false
allowed_clients: []
disallowed_clients: []
blocked_hosts: []
cache_size: 4194304
cache_ttl_min: 0
cache_ttl_max: 0
bogus_nxdomain: []
aaaa_disabled: true
enable_dnssec: false
edns_client_subnet: false
filtering_enabled: true
filters_update_interval: 24
parental_enabled: false
safesearch_enabled: false
safebrowsing_enabled: false
safebrowsing_cache_size: 1048576
safesearch_cache_size: 1048576
parental_cache_size: 1048576
cache_time: 30
rewrites:
- domain: plugins.jetbrains.com
answer: 13.32.53.109
- domain: download.jetbrains.com
answer: 52.30.174.243
- domain: harbor.zhangguanzhang.com
answer: 192.168.2.111
- domain: www.jetbrains.com
answer: 127.0.0.1
- domain: jetbrains.com
answer: 0.0.0.0
blocked_services: []
tls:
enabled: false
server_name: ""
force_https: false
port_https: 443
port_dns_over_tls: 853
allow_unencrypted_doh: false
strict_sni_check: false
certificate_chain: ""
private_key: ""
certificate_path: ""
private_key_path: ""
filters:
- enabled: false
url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
name: AdGuard Simplified Domain Names filter
id: 1
- enabled: false
url: https://adaway.org/hosts.txt
name: AdAway
id: 2
- enabled: false
url: https://hosts-file.net/ad_servers.txt
name: hpHosts - Ad and Tracking servers only
id: 3
- enabled: false
url: https://www.malwaredomainlist.com/hostslist/hosts.txt
name: MalwareDomainList.com Hosts List
id: 4
- enabled: false
url: https://raw.githubusercontent.com/vokins/yhosts/master/data/tvbox.txt
name: tvbox
id: 1575018007
- enabled: false
url: https://hosts.nfz.moe/full/hosts
name: neoHosts full
id: 1575618240
- enabled: false
url: https://hosts.nfz.moe/basic/hosts
name: neoHosts basic
id: 1575618241
- enabled: false
url: http://sbc.io/hosts/hosts
name: StevenBlack host basic
id: 1575618242
- enabled: false
url: http://sbc.io/hosts/alternates/fakenews-gambling-porn-social/hosts
name: StevenBlack host+fakenews + gambling + porn + social
id: 1575618243
- enabled: false
url: https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD/anti-ad-easylist.txt
name: anti-AD(Adblock+neohosts+yhosts+cjxlist+adhlist)
id: 1577113202
- enabled: true
url: https://zhangguanzhang.github.io/adguard/hosts
name: hosts
id: 1608901996
whitelist_filters:
- enabled: true
url: https://zhangguanzhang.github.io/adguard/whitelist.txt
name: white
id: 1599614146
user_rules: []
dhcp:
enabled: false
interface_name: ""
gateway_ip: ""
subnet_mask: ""
range_start: ""
range_end: ""
lease_duration: 86400
icmp_timeout_msec: 1000
clients: []
log_compress: false
log_localtime: false
log_max_backups: 0
log_max_size: 100
log_max_age: 3
log_file: ""
verbose: false
schema_version: 6

保存,然后网络-DHCP/DNS-高级设置-DNS 服务器端口0,不使用 dnsmasq 的 dns 功能,回到 web 上保存应用。确保关闭了dnsamsq的dns server功能后,在adguardhome保存应用后打开web:3000就可以看到了,默认root/root
设置-常规设置里保留时间之类的不要设置成30天90天之类的,特别是你接入设备多,日志记录了可能把路由器容量撑满,配置成24小时就够了

放行转发

设备连上wifi后无法访问外网,看了下到旁路由上能通,旁路由上也能ping公网,猜测iptables缺少放行,网络-防火墙-自定义规则,添加下面内容,cidr根据自己实际情况写

1
iptables -I forwarding_rule --src 192.168.2.0/24 -j ACCEPT

网络不通

连不上局域网下面其他机器,抓包发现arp无响应,查看arp表项错误,cmd管理员arp -d删除,例如192.168.2.111不通

1
arp -d 192.168.2.111

配置源

web上系统-软件包-配置里, 发行版软件源全部注释了,最下面追加

1
2
3
4
5
6
src/gz openwrt_core http://mirrors.ustc.edu.cn/lede/releases/19.07.4/targets/x86/64/packages
src/gz openwrt_base http://mirrors.ustc.edu.cn/lede/releases/19.07.4/packages/x86_64/base
src/gz openwrt_luci http://mirrors.ustc.edu.cn/lede/releases/19.07.4/packages/x86_64/luci
src/gz openwrt_packages http://mirrors.ustc.edu.cn/lede/releases/19.07.4/packages/x86_64/packages
src/gz openwrt_routing http://mirrors.ustc.edu.cn/lede/releases/19.07.4/packages/x86_64/routing
src/gz openwrt_telephony http://mirrors.ustc.edu.cn/lede/releases/19.07.4/packages/x86_64/telephony

然后保存

安装tcpdump

1
https://archive.openwrt.org/releases/packages-18.06/aarch64_generic/base/

参考

CATALOG
  1. 1. 由来
  2. 2. 前置工作
    1. 2.1. 虚机准备
    2. 2.2. 导入img
    3. 2.3. 后期pve加网卡在 openwrt 里 pppoe 拨号的话
  3. 3. 旁路由的配置
    1. 3.1. 路由静态ip配置
    2. 3.2. web配置
      1. 3.2.1. DHCP
    3. 3.3. DNS
      1. 3.3.1. dnsmasq作为dns server
      2. 3.3.2. adguard home 作为dns server
    4. 3.4. 放行转发
    5. 3.5. 网络不通
    6. 3.6. 配置源
    7. 3.7. 安装tcpdump
  4. 4. 参考