yjiang's cake

bash的四种模式

这篇文章是因为这样的问题而来的:

本地从源装了php,命令可以直接使用

    which php
    $ /usr/local/bin/php

服务器是指定目录编译后使用alias引入的

    which php
    $ alias php='/opt/php56/bin/php'

可以看出,是因为php没有放入命令目录导致的,要达到效果需要了解bash的四种模式.

bash的四种模式及环境变量的加载

1. interactive-login shell 交互式登录shell

  1. /etc/profile 加载系统配置
  2. ~/.bash_profile ~/.bash_login ~/.profile 按顺序查找这三个个人配置文件,如果执行成功其中一个则返回(三个中只会有一个被执行)

2. non_interactive-login shell 非交互式登录shell

  1. 同 1

3. interactive-non_login shell 交互式非登录shell

  1. /etc/bash.bashrc
  2. ~/.bashrc

2. non_interactive-login shell 非交互式登录shell

  1. export BASH_ENV=~/.bashrc #找到bashrc则加载

从以上四种状态可以看出,我们需要的是 3 这种方式, 通过 man bash可以找到 -i参数可实现.

#!/bin/bash -i
php -v

在实际应用中, 使用bash -ic命令调用时,会导致频繁报 no job control in this shell错误.

内网dns服务器(dnsmasq)

场景

  • 没有网关权限
  • 一台archlinux系统的测试机
  • 组员10人左右

需求

  • 需要经常访问的内部站点若干
  • 无需每次有内部域名上线,每个人都绑hosts

方案选择

小组人员不是太多,dnsmasq足够支撑作为DNS服务器

DNSMasq搭建流程

安装DNS服务


pacman -S dnsmasq

修改监听地址


vi/etc/dnsmasq.conf
#找到 listen-address,去掉注释;改为
listen-address=127.0.0.1,10.207.x.x

修改本机DNS服务器为本地DNS服务器


vi /etc/resolv.conf
nameserver 127.0.0.1

设置上游DNS服务器

vi /etc/dnsmasq.conf
#找到 resolv-file 修改如下
resolv-file=/etc/resolv.dnsmasq.conf
#创建上游DNS服务器文件
cd /etc && touch resolv.dnsmasq.conf
vi resolv.dnsmasq.conf
#文件内容如下
# Google's nameservers, for example
nameserver 114.114.114.114
nameserver 8.8.8.8

创建局域网域名解析

vi /etc/dnsmasq.conf
#找到 conf-dir 去掉注释
conf-dir=/etc/dnsmasq.d/,*.conf
#创建内网域名解析文件
mkdir -p /etc/dnsmasq.d
vi /etc/dnsmasq.d/nameserver.conf

#设置域名解析内容(server 让域名从指定的ip去查找dns服务)
server=/leju.dev/127.0.0.1
server=/.yjiang.dev/10.207.x.x

#指定ip 类似hosts硬解)
address=/leju.dev/127.0.0.1

还可以配合 google hosts 文件实现自动翻墙

加入开机启动,并重启服务使其生效

systemctl enable dnsmasq.service
systemctl restart dnsmasq.service

Tips

/etc/dnsmasq.conf中的 listen-address=127.0.0.1,10.207.x.x 必须加127.0.0.1;不然本地无法监听dns服务导致别人可以正常访问而DNS服务器本机不行.

/etc/dnsmasq.conf中的 server=114.114.114.114 为设置上游dns

参考

linux上用strongswan搭建ikev2协议vpn

测试平台 :DigitalOcean VPS ubuntu14.04 x64, strongswan5.2.2

运行以下命令请使用root权限

一:安装strongswan

由于ubuntu软件仓库中strongswan版本较低,因此从官网源码编译安装

apt-get install build-essential     #编译环境
aptitude install libgmp10 libgmp3-dev libssl-dev pkg-config libpcsclite-dev libpam0g-dev     #编译所需要的软件
wget http://download.strongswan.org/strongswan-5.2.2.tar.bz2
tar -jxvf strongswan-5.2.2.tar.bz2 && cd strongswan-5.2.2
./configure --prefix=/usr --sysconfdir=/etc  --enable-openssl --enable-nat-transport --disable-mysql --disable-ldap  --disable-static --enable-shared --enable-md4 --enable-eap-mschapv2 --enable-eap-aka --enable-eap-aka-3gpp2  --enable-eap-gtc --enable-eap-identity --enable-eap-md5 --enable-eap-peap --enable-eap-radius --enable-eap-sim --enable-eap-sim-file --enable-eap-simaka-pseudonym --enable-eap-simaka-reauth --enable-eap-simaka-sql --enable-eap-tls --enable-eap-tnc --enable-eap-ttls
make&& make install

二:生成、安装证书

win7+和Android、wp8.1等平台的VPN客户端走ikev2协议,需要制作相应的证书

  • 1.先生成根证书
ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=CN, O=strongSwan, CN=strongSwan CA" --ca --outform pem > caCert.pem
  • 2.然后是服务器端的证书
ipsec pki --gen --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CN, O=strongSwan, CN=VPS的公网ip或域名" --san="VPS的公网ip或域名" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem
  • 3.客户端的证书
ipsec pki --gen --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CN, O=strongSwan, CN=client" --outform pem > clientCert.pem

生成的客户端证书 clientCert.pem 不能直接导入到win7+或Anroid设备中,需先转换为.p12格式。执行后会提示要设置证书使用密码,可以设置一下密码也可以直接回车(密码为空)

openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "strongSwan CA" -out clientCert.p12
  • 4.安装证书
cp caCert.pem /etc/ipsec.d/cacerts/
cp serverCert.pem /etc/ipsec.d/certs/
cp serverKey.pem /etc/ipsec.d/private/

客户端安装caCert.pem与clientCert.pem(clientCert.p12),下载文件可使用ftp软件,或使用cat caCert.pemcat clientCert.pem命令,将打印出的内容直接复制到本地即可。

三:配置strongswan

  • 1: /etc/ipsec.conf
config setup
    strictcrlpolicy = yes
    cachecrls = yes
    uniqueids = yes    #允许多设备同时在线

conn %default
        left=%any
        leftsubnet=0.0.0.0/0
        right=%any
        rightsourceip=10.11.1.0/24
        rightdns=8.8.8.8,8.8.4.4

conn ikev1
    keyexchange=ikev1
    leftauth=psk
    rightauth=psk
    rightauth2=xauth
    auto=add

conn windows7
    keyexchange=ikev2
    ike=aes256-sha1-modp1024!
    rekey=no
    leftauth=pubkey
    leftcert=server.cert.pem
    rightauth=eap-mschapv2
    rightsourceip=10.31.2.0/24
    rightsendcert=never
    rightdns=8.8.8.8,8.8.4.4
    eap_identity=%any
    auto=add
  • 2: /etc/ipsec.secrets
: RSA server.pem
: PSK "foo"                 #设置的证书密码
username : XAUTH "passwd"
username2 : EAP "passwd"    #windows用户

对于windowsphone8.1,在客户端输入的用户名发送到服务器显示为设备名称\用户名的形式,故认证需加上设备名称,设备名称在设置-关于-手机信息 中查看

  • 3: /etc/strongswan.conf
#加入分配的dns
charon {
    dns1 = 8.8.8.8
    dns2 = 208.67.222.222
}

四:配置 Iptables 转发

iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT

#开启转发
vi /etc/sysctl.conf
#打开注释
net.ipv4.ip_forward = 1
#执行
sysctl -p

iptables -t nat -A POSTROUTING -s 10.11.1.0/24 -o eth0 -j MASQUERADE  #地址与上面地址池对应
iptables -A FORWARD -s 10.11.1.0/24 -j ACCEPT     #同上
#为避免VPS重启后NAT功能失效,可以把如上5行命令添加到 /etc/rc.local 文件中,添加在exit那一行之前即可。

五:启动strongswan

  • 后台运行:
ipsec start 
  • 滚动日志:
ipsec start --nofork

参考链接:

更简单的一键脚本

https://github.com/hwdsl2/setup-ipsec-vpn/

vim设置文件bom标记

由txt直接创建的csv文件,如果为utf-8编码,通常使用excel打开会乱码, 通过设置bom头可解决乱码问题

取消bom

:set nobomb

设置bom

:set bomb

查看bom标记

:set bomb?

Copyright © 2016 yjiang's cake

返回顶部