public void Generate() { WriteLine("#Start nat config generator"); using (var db = new ApplicationDbContext()) { var clients = db.Clients .Include(c => c.GreyAddress) .ThenInclude(g => g.White) .Where(c => !c.IsDeleted) .Where(c => c.GreyAddress != null) .Where(c => c.GreyAddress.White != null) .ToList(); clients.ForEach(c => { var status = ClientMapper.CalculateClientStatus(c); if (status != ClientStatus.Active) { WriteLine($"#{c.Login} state {status}"); return; } var grey = c.GreyAddress.Address; var white = c.GreyAddress.White.Address; WriteLine($"#2-way mapping for {c.Login}"); WriteLine($"/sbin/iptables -t nat -A PREROUTING -d {white} -j DNAT --to-destination {grey}"); WriteLine($"/sbin/iptables -t nat -A POSTROUTING -s {grey} -o eth0.52 -j SNAT --to-source {white}"); WriteLine(); }); } WriteLine("#End nat config generator"); }