Author: Ken

  • Deploy Google BBR on Centos

    visit https://www.elrepo.org

    rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

    Centos6:rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

    Centos7:rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

    yum –enablerepo=elrepo-kernel install kernel-ml -y

    vi /boot/grub/grub.conf

    default=0

    vi /etc/sysctl.conf

    net.core.default_qdisc=fq
    net.ipv4.tcp_congestion_control=bbr

    reboot

    sysctl net.ipv4.tcp_available_congestion_control

    The output should resemble:
    net.ipv4.tcp_available_congestion_control = bbr cubic reno

  • OpenVPN Server on FreeBSD

    和Centos有点区别。

    1. 使用pkg安装openvpn:pkg install openvpn
    2. 使用easy-rsa生成数字证书,生成openvpn server配置文件,默认的即可,我们使用udp协议,把服务端口修改为443,这样比较通用。
    3. 修改rc.conf,启用pf做nat,启用gateway,增加openvpn配置。pf_enable=”YES”
      pf_rules=”/etc/pf.conf”
      pflog_enable=”YES”
      pflog_logfile=”/var/log/pflog”
      gateway_enable=”YES”
      openvpn_enable=”yes”
      openvpn_configfile=”/usr/local/etc/openvpn/2.0/conf/server.conf”
      openvpn_if=”tun”
    4. 增加pf.conf配置文件,这里我们的FreeBSD运行在ESXI上,所以网卡是vmx0,openvpn clients的网络是10.9.0.0/24,服务器的IP地址是192.168.0.99:#/etc/pf.conf
      if=”vmx0″
      vpn_if=”tun0″
      vpn_net = “10.9.0.0/24″icmp_types = “echoreq”
      open_tcp = “{22}”
      open_udp = “{443}”
      # wan ip
      ip = 192.168.0.99
      set block-policy drop
      set skip on lo0
      set limit { states 10000, frags 5000 }
      set loginterface vmx0
      set optimization normal
      set require-order yes
      set fingerprints “/etc/pf.os”
      set ruleset-optimization basicscrub in all fragment reassemble random-idnat on $if from $vpn_net to any -> $ip

      block log all
      block return

      antispoof quick for $if
      pass in quick proto udp from any to port 443 keep state label “openvpn”

      # Pass stuff on the VPN interface
      pass quick on $vpn_if keep state

      pass in on $if proto tcp from any to any port 22 keep state

      pass in on $if proto tcp from any to any port $open_tcp keep state
      pass in on $if proto udp from any to any port $open_udp keep state

      pass out quick all keep state

      pass in on $if inet proto icmp all icmp-type $icmp_types keep state

    5. 在sysctl.conf中增加IP forwarding配置:net.inet.ip.forwarding=1
    6. 可以启动了:service openvpn start
    7. 其实大同小异,不过最近发现zfs和jail都是蛮不错的好东西,大神的设计往往超越了时代,却是那些简陋而充满bug的设计流行于世间。

     

  • 教育网真是一个独特的存在

    最近有传闻要封锁VPN业务,大概是工信部想在运营商做白名单,这个口风出来,我觉得是针对大量跨国公司的,因为他们在自己公司的局域网内开通了可以访问境外网站的vpn通道,让员工在公司的时候可以自由访问互联网,要针对个人行为的话,封锁起来成本太高,ss这么多年了,也没见能封锁。

    很多人觉得从技术上当局没有办法赢过跨国公司,但实际上这个是很容易实现的,跨国公司无非是使用工业协议ike+ipsec,有固定的端口(udp500和udp4500),把端口一屏蔽,就熄火,再不行,做个udp端口白名单,从技术上总是有方法去实现,只是成本可能会有点高,路由器上的access-lists会消耗大量的cpu资源(最近在机房屏蔽蠕虫的时候发现这个问题),但是,把IP地址null route已经是最高效的方式了,null port估计消耗会更大。

    但udp端口白名单是不太可能实现的,为什么呢?因为ipv4地址不足,很多网络都经过了二次nat甚至三次nat,端口都被转换了好几次,如果有个udp端口白名单,呵呵。

    所以,他们只能屏蔽目的端口,这个端口目前看来是无法修改,但是它理论上来讲是可以修改的。

    维持一个白名单,并不是技术问题,因为当局有的是金钱可以去实现,法规的问题更严重一些,如果按照既有的行事规则,鸡鸣狗盗之类,那完全可能会出现诸如某利益集团利用来打击商业竞争对手而引起对手财团向当局告状的情形,如果弄一个法规出来,那就会导致信息公开,引来开历史倒车的恶评,再者,就是当局愿意为了封锁付出多少经济增长代价了,政策一出,必然会引起众怒,国际媒体开始为“投资环境急剧恶化”而呼号。

    还有一个重要的角色就是厂商,CiscoJuniper虽然帮着做了不少恶,但是封锁工业vpn是不是会触及到他们的利益,这个很难说,毕竟工商业方面应用太过广泛,一方面,当局可能会要求他们对自己的客户隐藏vpn封锁的真相,另一方面,他们总不可能在自己网站贴个公告说你们的vpn都用不了,并不是因为我们的原因而是?

    有军方背景的迈普公司生产的路由器,和Cisco的配置几乎同出一辙,抄袭得一摸一样,但是也没见Cisco去告它啊, 大抵因为知道谁是它爹,大陆ssl vpn装机量第一的国产商深信服,也被好些大学给下架了,因为上千个用户高负荷的时候它无法进行承载。

    教育网真是一个独特的存在,不但有自己的国际出口,而且里面啥都可以有,哈哈哈。

    但是,最应该被封锁消息的,不是学生吗?