设置Ubunt Server 20.04当软路由器

出于对红米AC2100,科学上网128M内存不够用的缘故。又没那技术焊接。只好寻找软路由方案。一开始我想用Openwrt方案,寻找现有固件,但我怕被人设置后门。又寻了自己编译的方案,发现其中的坑简直太多。比如很多插件有内核版本要求。我编译了最新版本的发现不能用。还得自行去编译插件。搞来搞去,白浪费了两天。

后来我想,Openwrt也是linux发行版。这么多发行版,干嘛非得用它。我选择了最熟悉的Ubuntu。开干。

1,我安装的UbuntuServer20.04,默认最小安装。采用的是Hyper-v虚拟机。因为不想重新布线,有设置了把红米AC2100刷成了Openwrt,版本是 OpenWrt R20.4.8 / LuCI Master (git-20.117.60969-420c61a) 主要是用里面的交换机功能。最新版的openwrt,交换机功能改了,我琢磨了半天也没弄清楚。

2,把Vlan设置好,在Hyper-v里的虚拟机设置网口上设置好 Vlan ID 标签。你还要保证Ubuntu能上网啊,不然怎么安装包。所以你提前要把包安装好。比如pppoeconf这个包,因为需要拨号上网。

3,接下来就是先做好基本的上网规则,如下:

sudo vi /etc/netplan/00-installer-config.yaml # 设置ip地址,必须有个局域网IP,比如这里的eth1

network:
  ethernets:
    eth0:
      addresses: [192.168.1.2/24]
      dhcp4: no
    eth1:
      addresses: [10.6.11.1/24]
      dhcp4: no
  version: 2

sudo vi /etc/sysctl.conf 
#编辑net.ipv4.ip_forward=1
sysctl -p 
#使之转发生效
sudo iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT 
#开启防火墙规则,允许从 eth1到ppp0的转发
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
#如果你的pppoeconf设置成功了,应该会多一个ppp0的接口,这里执行nat转换
sudo apt-get install iptables-persistent 
# 安装此包来保存iptables 规则,否则每次重启都需要执行sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE来开启上网.
sudo iptables-save > /etc/iptables/rules.v4 
#此命令用来保存规则,所以设置好规则一定要测试一下,避免保存后上不了网。

4,完成上述操作后,现在你可以当它一台能上网的的vps主机了。你可以安装各种你想要的功能,比如V2ray,dnsmasq,Anyconnect,PHP,Apache,SMB,Nginx,docker,KVM(记得用这个命令开启虚拟化,Set-VMProcessor -VMName “WindowsNode 01” -ExposeVirtualizationExtensions $true)

5,这里我增加一个开启upnp的功能,默认是没有的。执行如下即可

sudo apt install miniupnpd
#编辑配置
sudp vi /etc/miniupnpd.conf
ext_ifname=ppp0
listening_ip=10.6.11.1/24
enable_natpmp=yes
enable_upnp=yes
#开启服务
sudo systemctl enable miniupnpd.service
sudo systemctl start miniupnpd.service

V2ray Config.json配置文件解析

发现网上很多都被删除和下架了,其余的也是凌乱不堪(官网也是,作者很随性。)。故写下来作为回忆。
本非大神,作为一个初学者,仅供参考。

为了方便大家深入理解,我这里提供了配置文件供大家参考

ipv4 ipv6 V2ray透明代理配置文件.7z:

https://url64.ctfile.com/f/22136564-1019284627-e61972 (访问密码: 9280)

V2ray的设计思路,其实相当于一条网线。他没有明显客户端和服务端之分。
你可以通过(inbound,outbound)它把所有的节点连接起来,然后通过(routing)选择不同的出口出去。而区分的标记就是(tag)这个参数。
这个(tag)参数分为内置(tag)和外置(tag)。所以你设置的(tag)不要重复了。

到这里是不是有点像,路由器的QOS标记路由,先标记在路由。

基本思路如下,点对点的单线,配置文件服务端一般是如下格式

{
    ”log“:{},
    "inbound":{},#此为输入端。也就是对应客户端的(outbound)配置。
    "outbound":{}#此为输出端。也就是设置从客户端来的流量怎么出去。
}
注意的是语法,
1、不是配置最后一条,请加上英文逗号分割配置参数。哪怕是参数里的参数也遵循这个规则。
2、所有符号都是英文下输入。
3、注意括号配对问题。

点对点的单线,配置文件客户端一般是如下格式

{
    ”log“:{},
    "inbound":{},#此为输入端,用于接收本地网络数据包,可添加http、socks、透明代理,设置监听地址和端口等参数
    "outbound":{},#此为输出端,用于连接服务端,此参数保持跟服务端一致即可。
    "dns":{},#设置dns参数,比如DNS服务器地址,支持DOH TCP UDP。
    "routing"{},#设置分流规则,inbound过来的流量根据此规则选择直通还是代理。
}

本模板配置为TLS+Vmess+WS

如下是服务端配置,如果要用请去掉#和后面的解析

{
    "log" : 
      {
      "access": "/var/log/v2ray/access.log",#设置日志,如果是Windows请自行改变下日志路径
      "error": "/var/log/v2ray/error.log",
      "loglevel": "warning"
       },
    "inbound": 
   {
      "port": 7777,#设置监听本地端口
      "listen":"127.0.0.1",#设置监听地址
      "protocol": "vmess",#设置协议,可选还有VLess,Shadowsocks,Trojan,需要新版本支持
      "settings": 
               {
                  "clients": 
                  [
                    {
                     "id": "a9873f7b-fa38-4ddd-bda2-f7b19c02c9b4",#设置uuid,最好自己生成
                      "level": 1,
                      "alterId": 111
                     }   
                   ]
                },
        "streamSettings":
        { #此为底层传输配置
        "network":"ws",
        "wsSettings":
              {
               "path":"/web"
              }
         }
     },
     "outbound": 
     {
         "protocol": "freedom",#这里代表出站直接出即可,如果有其他转发需求,把上级的inbound在这里再输入一次
         "settings": {}
      },
          "outboundDetour": 
               [
                  {
                    "protocol": "blackhole",#黑洞路由,不需要的流量直接丢弃
                    "settings": {},
                    "tag": "blocked"
                   }
               ]
}

如下是客户端配置

{
  "log": 
        {
          "access": "/var/log/v2ray/Vaccess.log",#这里也是日志
          "error": "/var/log/v2ray/Verror.log",
          "loglevel": "warning"
        },
  "inbounds": 
        [      #此inbound是设置本地代理的,极为重要。
          {
            "tag": "socks",  #此设置socks代理
            "port": 1887,
            "listen": "0.0.0.0",
            "protocol": "socks",
            "sniffing": 
                 {
                  "enabled": true,
                  "destOverride": 
                        [
                           "http",
                            "tls"
                        ]
                  },
             "settings": 
                 {
                  "auth": "noauth",
                  "udp": true,
                  "allowTransparent": false
                 }
          },
          {
             "tag": "http",  #此设置http代理
             "port": 1889,
             "listen": "0.0.0.0",
             "protocol": "http",
             "sniffing": 
                 {
                   "enabled": true,
                   "destOverride": 
                           [
                              "http",
                               "tls"
                           ]
                 }
           },
           {
              "port": 1888,      #此设置为透明代理
              "listen":"0.0.0.0",
              "protocol": "dokodemo-door",
              "sniffing": 
                   {
                     "enabled": true,
                     "destOverride": 
                            ["http","tls"]
                    },
               "settings": 
                    {
                      "network": "tcp,udp",
                      "followredirect": true,
                      "allowTransparent": false
                     },
               "streamSettings":
                     {
                       "sockopt":
                            {
                              "tproxy":"redirect"
                             }
                     }
            },
            {
                 "listen":"127.0.0.1", #此为设置DNS代理,监听本地dns请求
                 "port":5353,
                 "protocol":"dokodemo-door",
                 "tag":"dns-in",
                 "settings":
                      {
                          "address":"8.8.8.8",
                          "port":53,
                          "network":"tcp,udp"
                      }
             }
         ],
  "outbounds": 
       [
           {
                "tag": "proxy",
                "protocol": "vmess",
                "settings": 
                     {
                        "vnext": 
                            [
                               {
                                  "address": "90.com",
                                  "port": 7777,
                                  "users": 
                                       [
                                         {
                                           "id": "a9873f7b-fa38-4ddd-bda2-f7b19c02c9b4",
                                           "alterId": 111,
                                           "email": "[email protected]",
                                           "security": "auto"
                                          }
                                        ]
                                 }
                              ]
                       },
                   "streamSettings": 
                        {
                           "network": "ws",
                           "security": "tls",
                           "tlsSettings":
                                    {
                                       "allowInsecure": false,
                                       "serverName": "90.com"
                                     },
                           "wsSettings":
                                    {
                                        "path": "/web",
                                        "headers": 
                                              {
                                                "Host": "90.com"
                                               }
                                     }
                           },
                      "mux":
                           {
                              "enabled": false,
                              "concurrency": -1
                           }
                      "tag": "direct",
                      "protocol": "freedom",
                      "settings": {}
                           },
                           {
                       "tag": "block",
                       "protocol": "blackhole",
                       "settings": {
                                 "response": {
                                             "type": "http"
                                             }
                                    }
                             },
                             {
                        "protocol": "dns",
                         "tag": "dns-out"
                              }
         ],
      "dns": {
                "servers": [
                            "https+local://1.1.1.1/dns-query",
                                        {
                                           "address":"https+local://223.5.5.5/dns-query",
                                           "domains":[
                                                       "geosite:cn"
                                                      ]
                                        }
                             ]
               },
    "routing": [
                   {
                    "type": "field",
                    "inboundTag": "dns-in",
                    "outboundTag": "dns-out"
                    },
                    {
                    "outboundTag": "block",
                    "domain": [
                              "geosite:category-ads-all"
                             ],
                    "enabled": true
                     },
                     {
                    "type": "field",
                    "outboundTag": "direct",
                    "domain": [
                                "geosite:cn"
                              ],
                     "enabled": true
                      },
                      {
                     "type": "field",
                     "outboundTag": "direct",
                     "ip": [
                              "geoip:private",
                              "geoip:cn"
                            ],
                     "enabled": true
                       },
                       {
                         "type": "field",
                         "ip":[
                                "8.8.8.8",
                                "1.1.1.1",
                                "104.0.0.0/8",
                                "142.0.0.0/8"
                               ],
                      "domains":[
                                "geosite:google",
                                "geosite:youtube",
                                ],
                      "outboundTag": "proxy",
                      "enabled": true
                        }
                 ]
         }
}

此配置文件,你可能看到很多 geoip、geosite等参数配置,这个预定义域名和ip列表,包含在你下载V2ray的geoip.dat与geosite.dat中。定义如下

  • category-ads:包含了常见的广告域名。
  • category-ads-all:包含了常见的广告域名,以及广告提供商的域名。
  • tld-cn:包含了 CNNIC 管理的用于中国大陆的顶级域名,如以 .cn.中国 结尾的域名。
  • tld-!cn:包含了非中国大陆使用的顶级域名,如以 .hk(香港)、.tw(台湾)、.jp(日本)、.sg(新加坡)、.us(美国).ca(加拿大)等结尾的域名。
  • geolocation-cn:包含了常见的大陆站点域名。
  • geolocation-!cn:包含了常见的非大陆站点域名,同时包含了 tld-!cn
  • cn:相当于 geolocation-cn 和 tld-cn 的合集。
  • apple:包含了 Apple 旗下绝大部分域名。
  • google:包含了 Google 旗下绝大部分域名。
  • microsoft:包含了 Microsoft 旗下绝大部分域名。
  • facebook:包含了 Facebook 旗下绝大部分域名。
  • twitter:包含了 Twitter 旗下绝大部分域名。
  • telegram:包含了 Telegram 旗下绝大部分域名。

为了方便大家深入理解,我这里提供了配置文件供大家参考

ipv4 ipv6 V2ray透明代理配置文件.7z:

https://url64.ctfile.com/f/22136564-1019284627-e61972 (访问密码: 9280)