linux下以多用户运行程序监听不同的端口分别走指定的IP出去
第一步,安装示例服务端后,根据要监听的端口数设置多个配置文件,此处步骤省略。
第二步,根据要监听的端口数新增用户数,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | useradd -r user30 useradd -r user31 useradd -r user32 useradd -r user33 useradd -r user34 useradd -r user35 useradd -r user36 useradd -r user37 useradd -r user38 useradd -r user39 useradd -r user40 useradd -r user41 useradd -r user42 useradd -r user43 useradd -r user44 useradd -r user45 |
第三步,复制和修改示例配置文件此处步骤省略。
第四步,修改 iptables 规则
在第二步新建好的用户,需要知道其userid,直接查看/etc/passwd文件即可,命令如下:
1 | [email protected]~# more /etc/passwd |
修改 iptables 规则(假设端口从8030至8045):
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 | # /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8030 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8031 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8032 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8033 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8034 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8035 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8036 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8037 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8038 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8039 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8040 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8041 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8042 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8043 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8044 -j ACCEPT /sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8045 -j ACCEPT # /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 999 -j MARK --set-mark 999 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 998 -j MARK --set-mark 998 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 997 -j MARK --set-mark 997 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 996 -j MARK --set-mark 996 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 995 -j MARK --set-mark 995 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 994 -j MARK --set-mark 994 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 993 -j MARK --set-mark 993 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 992 -j MARK --set-mark 992 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 991 -j MARK --set-mark 991 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 990 -j MARK --set-mark 990 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 989 -j MARK --set-mark 989 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 988 -j MARK --set-mark 988 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 987 -j MARK --set-mark 987 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 986 -j MARK --set-mark 986 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 985 -j MARK --set-mark 985 /sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 984 -j MARK --set-mark 984 # /sbin/iptables -t nat -A POSTROUTING -m mark --mark 999 -j SNAT --to-source IP1 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 998 -j SNAT --to-source IP2 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 997 -j SNAT --to-source IP3 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 996 -j SNAT --to-source IP4 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 995 -j SNAT --to-source IP5 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 994 -j SNAT --to-source IP6 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 993 -j SNAT --to-source IP7 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 992 -j SNAT --to-source IP8 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 991 -j SNAT --to-source IP9 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 990 -j SNAT --to-source IP10 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 989 -j SNAT --to-source IP11 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 988 -j SNAT --to-source IP12 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 987 -j SNAT --to-source IP13 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 986 -j SNAT --to-source IP14 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 985 -j SNAT --to-source IP15 /sbin/iptables -t nat -A POSTROUTING -m mark --mark 984 -j SNAT --to-source IP16 |
保存 iptables 配置:
1 | [email protected]~# /etc/init.d/iptables save |
第五步,启动示例服务端
假设是以 root 用户登录的,那么需要分别以user30—user45运行示例服务端
命令如下:
1 | [email protected]~# sudo -u user30 bash -c 'nohup /command_path -c /etc/config_path > /tmp/pid30 &' |
此处省略其它用户命令。
至此,设置完成。